我有一张桌子
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索引,以便将列添加到索引中吗?
答案 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)