关于索引900字节限制

你知道你的SQL Server索引有最大900字节的限制吗?下面分场景介绍

  • 准备测试表
USE tempdb
GO 

IF OBJECT_ID('tempdb..#index_900_byte') IS NOT NULL
DROP TABLE #index_900_byte
CREATE TABLE #index_900_byte(id int, name nvarchar(500))
  • 场景1:没有索引的情况下,即使数据大于900字节(比如 460汉字=920字节),依然插入数据成功
INSERT INTO #index_900_byte VALUES(1,'一二三四五六七八九十')
INSERT INTO #index_900_byte VALUES(2,REPLICATE('一二三四五六七八九十',46))   
SELECT * FROM #index_900_byte
  • 清空测试数据,添加索引会有警告:警告! 最大键长度为 900 个字节。索引 'idx_name' 的最大长度为 1000 个字节。对于某些大值组合,插入/更新操作将失败。
TRUNCATE TABLE #index_900_byte
CREATE INDEX idx_name ON #index_900_byte(name)
  • 场景2:已有索引的情况下,若数据小于等于900字节(900字节=450汉字),则插入成功
INSERT INTO #index_900_byte VALUES(3,'一二三四五六七八九十')
INSERT INTO #index_900_byte VALUES(4,REPLICATE('一二三四五六七八九十',45))
  • 场景3:已有索引的情况下,若数据大于900字节(比如 460汉字=920字节),则插入失败,报错:操作失败。索引 'idx_name' 的索引条目长度为 920 字节,超出了允许的最大长度 900 字节。
INSERT INTO #index_900_byte VALUES(5,REPLICATE('一二三四五六七八九十',46))
Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2022-01-14 17:29:58

results matching ""

    No results matching ""