【问题标题】:Index exceeds maximum length in SQL Server索引超出 SQL Server 中的最大长度
【发布时间】:2018-02-02 17:27:25
【问题描述】:

我遇到了错误。如何解决?为什么会出现此错误?

消息操作失败。索引 ix_Emp_no_1 的长度为 1526 字节的索引条目超过了最大长度 900 字节。

【问题讨论】:

  • 直接来自文档。 docs.microsoft.com/en-us/sql/sql-server/… "SQL Server 中聚集索引键的最大字节数不能超过 900。"
  • 因为索引ix_Emp_no_1的长度为1526字节的索引条目超过了最大长度900字节。
  • 您尝试放入索引的所有列的组合可能最大长度不能超过 900 字节。显然,在您的情况下- 的情况。怎么解决??将越来越少的列放入索引中
  • 添加你的表和索引的脚本
  • 我使用了下面的脚本。创建表 T_Index_Test(PRODUCT VARCHAR(50) NOT NULL, F_PHY_Name nvarchar(1000) not null CONSTRAINT PK_T_INDEX_TEST PRIMARY KEY(PRODUCT,F_PHY_NAME)) 插入 T_Index_Test 选择 'A0001',cast(replicate('x', 899) as varchar( 1000))

标签: sql-server indexing


【解决方案1】:

每个索引键的最大字节数

  • 900 字节的聚集索引。
  • 非聚集索引为 1,700

结果及意义:

  • 如果您有一个 nchar(450),因为 Unicode 字符占用 2 个字节,它将等于 900 个字节。
  • 您可以忽略 Unicode 而使用 char(900)。
  • 对于 varchar 和 nvarchar 等可变字符串类型,它似乎以相同的方式工作。
  • 如果您的复合键包含多个列,则它们的总和必须具有低于此限制的字节数。

注意:有时 SSMS 设计器不允许您创建大于 900 字节(直到 1700 字节)的索引,但官方支持。您只需要生成脚本并自己运行即可。

来源:https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-2017

【讨论】:

    【解决方案2】:

    我从未见过这种情况,但我发现这篇文章可能会帮助您处理您的情况。 https://blogs.msdn.microsoft.com/bartd/2011/01/06/living-with-sqls-900-byte-index-key-length-limit/

    听起来你有一个超过 900 字节的密钥,可能是一个大的文本字段。因此,您需要找到一种不同的方法来识别该行。尝试索引不同的列并包含问题列。

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 2012-03-24
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2018-08-09
      • 2018-07-21
      • 1970-01-01
      相关资源
      最近更新 更多