【发布时间】:2014-09-19 11:27:26
【问题描述】:
我有一张桌子
CREATE TABLE Test
(
id int primary key,
a nvarchar(max),
c nvarchar(max),
b nvarchar(max)
)
我想提高对表的查询性能,并想为经常访问的列创建索引。
由于除了 id 之外的所有字段都具有 nvarchar(max) 类型,因此 sql-server 说我无法为类型为 nvarchar(max) 的列创建索引
Create index MyIndex on T(a)
错误:表 'T' 中的列 'a' 的类型不能用作索引中的键列
根据MSND,可以使用以下符号创建索引
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ ; ]
我对这个选项感兴趣
[ 包括 (column_name [ ,...n ] ) ]关于它 MSDN 说:
INCLUDE (column [ ,... n ] ) 指定要添加的非键列 到非聚集索引的叶级别。非聚集索引 可以是唯一的或非唯一的。除 text、ntext 和 image 之外的所有数据类型均允许使用。
我可以创建任何索引或更改现有的 PK 索引以向索引中添加列吗?
【问题讨论】:
-
你真的需要这些列是
NVARCHAR(MAX)吗? -
问题是什么? (即使可以在这样的“大文本”列上添加索引,它也可能无法在查询计划中使用。)
-
您可能会在这里找到一些帮助(甚至是您的答案)。请查看[链接][1][1]:stackoverflow.com/questions/2863993/…
-
您对错误信息有什么不明白的地方?该消息与语法无关。它表示列类型不能用作索引键。
-
我非常认为限制将是 450 个字符,因为对于 nvarchar,数据长度是字符串长度的两倍,并且 sql server 中索引的限制是 900 字节。如果您想搜索文本列中的每个单词,可能需要全文搜索。
标签: sql sql-server tsql indexing