34,590
社区成员
发帖
与我相关
我的任务
分享
索引键的最大值
Microsoft® SQL Server™ 2000 保留 900 字节的最大索引键值限制,但更改了 CREATE INDEX 检查指定索引键是否超出允许的 900 字节最大键值时所使用的算法。新的 CREATE INDEX 算法与用于 CREATE TABLE 的行大小算法类似。
Microsoft SQL Server 7.0 版和更早的版本在检查 CREATE INDEX 语句所指定的键是否超出 900 字节时始终使用可变列的最大大小,例如:
CREATE TABLE TestTable
(PrimaryKey int PRIMARY KEY,
VarCharCol1 varchar(500),
VarCharCol2 varchar(500)
)
-- This statement fails because the maximum sizes
-- of the two columns exceeds 900 bytes:
CREATE INDEX TestIdx ON TestTable(VarCharCol1, VarCharCol2)
在 SQL Server 2000 中,上面的 CREATE INDEX 语句将成功执行但出现警告消息,除非一个或更多的数据行生成的键值超出 900 字节。
SQL Server 2000 CREATE INDEX 语句使用以下算法:
若所有固定列的大小加上 CREATE INDEX 语句指定的所有可变列的最大大小小于 900 字节,CREATE INDEX 语句将成功执行且不出现警告或错误。
若所有固定列的大小加上所有可变列的最大大小超过 900 字节,但是所有固定列的大小加上所有可变列的最小大小小于 900 字节,CREATE INDEX 语句将成功执行但出现一条警告,指出如果后续 INSERT 或 UPDATE 语句指定的值所生成的键值大于 900 字节,该语句将失败。若表中现有数据行的值所生成的键值大于 900 字节,CREATE INDEX 语句将失败。若后续 INSERT 或 UPDATE 语句指定的数据值所生成的键值大于 900 字节,该语句将失败。
若所有固定列的大小加上 CREATE INDEX 语句指定的所有可变列的最小大小大于 900 字节,CREATE INDEX 语句将失败。
下表显示创建某类索引的结果,这类索引的键只包含固定列或可变长度列。
索引列
固定数据列的大小 可变长度列的最大大小 索引键列长度总和的最大值*
是否创建索引
消息 由于索引键值过大导致 INSERT 或 UPDATE 运行时错误
> 900 字节 无 不相关 否 错误 索引没有生成错误。
<=900 字节 无 不相关 是 无 否
无 <=900 字节 不相关 是 无 否
无 > 900 字节 > 900 字节 否 错误 索引没有生成错误。
无 > 900 字节 <=900 字节 是 警告 仅当所有索引列的当前长度之和大于 900 字节。
*在执行 CREATE INDEX 语句时,表中的任何行都不能有总长度超过 900 字节的索引键值。
下表显示创建某类索引的结果,这类索引的键包含由固定列和可变长度列组成的混合类型。
索引列
可变长度列的最小大小 + 固定数据列的大小 可变长度列的最大大小 + 固定数据列的大小
索引键列长度总和的最大值*
是否创建索引
消息
由于索引键值过大导致 INSERT 或 UPDATE 运行时错误
> 900 字节 不相关 不相关 否 错误 索引没有生成错误。
<=900 字节 <=900 字节 不相关 是 无 否。
<=900 字节 > 900 字节 <=900 字节 是 警告 仅当所有索引列的当前长度之和大于 900 字节。
<=900 字节 > 900 字节 > 900 字节 否 错误 索引没有生成错误。
*在执行 CREATE INDEX 语句时,表中的任何行都不能有总长度超过 900 字节的索引键值。
再加一列符合条件的,建索引...