ela*_*row 5 t-sql sql-server sql-server-2008
使用SQL Server 2008 R2
考虑一个声明的表变量,如:
DECLARE @t TABLE (PK int IDENTITY(1,1) PRIMARY KEY CLUSTERED, Col1 int, Col2 int)
Run Code Online (Sandbox Code Playgroud)
我怎么做CREATE NONCLUSTERED INDEX任何名字,ON @t包括(Con1 ASC, Col2 ASC)
索引不应限于唯一值.
出于某种原因,我无法弄清楚这一点......
您可以按如下方式创建非聚集索引.
DECLARE @t TABLE (
PK INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
Col1 INT,
Col2 INT,
UNIQUE (Col1, Col2, PK))
Run Code Online (Sandbox Code Playgroud)
如果意图是Col1, Col2唯一的,那么PK从列列表中删除.
尽管它在面值中看起来好像在(PK)中添加了一个额外的列,但索引结构与Col1, Col2在#temp表上创建非唯一索引相同.
CREATE TABLE #T (
PK INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
Col1 INT,
Col2 INT)
/*PK added in to end of key anyway*/
CREATE NONCLUSTERED INDEX ix ON #T(Col1, Col2)
Run Code Online (Sandbox Code Playgroud)
对于非唯一的非聚集索引,SQL Server始终隐式地将CI密钥添加到NCI密钥.这只是明确地显示它.
有关非聚集索引键的更多信息,请参阅Kalen Delaney