如何在SQL Server 2005中具有数据类型varchar(4096)的列上解析900键长度限制索引?

Sha*_*shi 3 indexing sql-server-2005 non-clustered-index

这是在BFPRODATTRASSOCIATION(value,attributeid)include(productid)上创建索引创建索引idx_ncl_2的查询

BFPRODATTRASSOCIATION的表结构

ProdAttrAssociationId bigint no 8
ProductId             bigint no 8
AttributeId           bigint  no  8
Value                 varchar no 4096
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

最大密钥长度为900字节.索引'idx_ncl_2'的最大长度为1237字节.

我必须在此列上创建一个非聚集索引.有没有办法我可以为数据类型为varchar且大小大于900的列创建索引.

请建议.

mar*_*c_s 12

您不能 - 正如错误消息已经明确指出的那样,任何索引条目的长度不能超过900个字节.

您不能索引varchar(4096)字段 - 句点.没办法 - 这是一个严格的SQL Server限制 - 无法配置,更改它,使其更大.请参阅联机丛书 - 索引密钥的最大大小以进行确认.

您需要将"值"列限制为小于900字节,或者找到另一种方法来存储该数据 - 或者只是不将其包含在索引中.如果您只希望索引中的"value"字段具有覆盖索引(以便能够满足索引条目中的查询),则可以将该字段移动为索引中的包含列 - 这些字段不属于900字节的限制.

CREATE NONCLUSTERED INDEX idx_ncl_2 
  ON BFPRODATTRASSOCIATION(attributeid) 
  INCLUDE (productid, value)
Run Code Online (Sandbox Code Playgroud)

该指数应该有效.