4

这是创建索引的查询 create index idx_ncl_2 on BFPRODATTRASSOCIATION (value,attributeid) include (productid)

BFPRODATTRASSOCIATION的表结构

ProdAttrAssociationId bigint no 8
ProductId             bigint no 8
AttributeId           bigint  no  8
Value                 varchar no 4096

我收到此错误:

最大密钥长度为 900 字节。索引“idx_ncl_2”的最大长度为 1237 字节。

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

请建议。

4

2 回答 2

12

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

您不能索引 varchar(4096) 字段 - 句点。没有办法解决这个问题——这是一个严格的 SQL Server 限制——没有办法对其进行配置、更改、扩大。请参阅联机丛书 - 索引键的最大大小以进行确认。

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

CREATE NONCLUSTERED INDEX idx_ncl_2 
  ON BFPRODATTRASSOCIATION(attributeid) 
  INCLUDE (productid, value)

该索引应该有效。

于 2010-06-04T11:17:06.370 回答
4

您可以在作为字符串散列的计算列上创建和索引。有关一些想法和限制,请参阅T-SQL 中的散列函数使用散列键的智能数据库设计。

于 2010-06-04T12:05:39.560 回答