我有这个表Test
:
ID - int primary key not null,
CODE - nvarchar(max),
NAME - nvarchar(max)
它在ID
上具有聚集索引。
但在执行计划中,搜索使用ID
和CODE
列。
如何向表中添加非聚集索引?尝试添加时,出现错误:
表Test中的列代码的类型对于用作索引中的键列无效
你能建议必须采取什么行动吗?
我需要为查询添加索引进行快速处理。
已存在聚集索引,该索引在查询处理中无效。
在SSMS中,要创建NON-CLUSTERED INDEX -唯一的选择是添加ID
作为键列,然后在索引中添加CODE作为Include
。但这意味着表将同时具有ID列上的CLUSTERED INDEX和ID上的NON-CLUSTERED INDEX(包含CODE)。是这样吗?
最佳实践是什么:
- 表是否可以同时具有基于同一ID键列的聚集索引和非聚集索引?
- 您应该如何解决此问题?
2条答案
按热度按时间w7t8yxp51#
您不能直接执行此操作,但可以使用
INCLUDE
正如拉穆所指出的,这样一个非聚集索引不会被使用,因为每个包含ID的搜索都将使用聚集主键来获得它的wated行并忽略代码。
PRIMARY KEY意味着每一行都有一个UNIQUE ID。
whlutmcx2#
您不能对MAX列进行索引,因为它们太大了,因为您声明的值可能在8,000到20亿字节之间;因此您在此处声明该名称可能超过4,000个字符。
CODE列似乎不太可能需要设置为MAX。是否有特定的原因导致此列设置为MAX-或者该列是通过ORM自动创建的,但未指定长度?如果不是,请将其设置为合理的长度,并在其上创建非聚集索引。