T-SQL - 更改索引,添加INCLUDE列

时间:2014-07-28 09:42:56

标签: sql sql-server tsql indexing

我有一张桌子

CREATE TABLE Test
(
    id int primary key,
    a nvarchar(max),
    c nvarchar(max),
    b nvarchar(max)
)

我希望提高对表的查询性能,并希望为经常访问的列创建索引(或索引)。

由于除 id 之外的所有字段都具有 nvarchar(max)类型,因此sql-server表示我无法为type为nvarchar(max)的列创建索引)

Create index MyIndex on T(a)
  

错误:列' a'在表格中' T'是一种无法用作索引

中的键列的类型

根据MSND,可以使用后面的符号来创建索引

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name 
    ON <object> ( column [ ASC | DESC ] [ ,...n ] ) 
    [ INCLUDE ( column_name [ ,...n ] ) ]
[ ; ]

我对该选项感兴趣

[ INCLUDE ( column_name [ ,...n ] ) ]
关于它MSDN说:

  

INCLUDE(column [,... n])指定要添加的非键列   到非聚集索引的叶级别。非聚集索引   可以是唯一的或非唯一的。除文字 ntext 图片外,允许使用所有数据类型。

我可以创建任何索引或更改现有的PK索引,以便将列添加到索引中吗?

1 个答案:

答案 0 :(得分:0)

您可以使用persist选项创建计算索引并在其上创建索引。

ALTER TABLE dbo.test ADD a2 AS SUBSTRING(a,1,1000) PERSISTED
ALTER TABLE dbo.test ADD b2 AS SUBSTRING(b,1,1000) PERSISTED
ALTER TABLE dbo.test ADD c2 AS SUBSTRING(c,1,1000) PERSISTED


CREATE INDEX ix_text_a ON dbo.text(a2)
CREATE INDEX ix_text_b ON dbo.text(b2)
CREATE INDEX ix_text_c ON dbo.text(c2)