为什么 SQL Server 有 900 字节的索引大小限制

Sha*_*pta 11 index sql-server clustered-index

为什么我们不能创建大小大于 900 字节的索引?这个问题是在一场没有人回答的演讲中提出的。

我可以想到这个方法来回答这个问题。

页面大小为 8K,可用 8060 900 字节 * 8 = 7200 字节(900*9 = 8100),因此页面中最多只能容纳 8 条记录。如果该索引是非聚集索引,则还需要存储聚集索引键,该索引键可以再次为 900 字节长,即对于单个记录所需的内存为(900 + 900 字节),即每页可以存储 4 条记录。

如果页面中只能存储 4 条记录,与性能提升相比,IO 操作开销将无效,因此索引大小限制为 900 字节。

Han*_*non 16

Microsoft SQL Server 2008 内部

事实上,提高可伸缩性是索引键限制为 900 字节或 16 列(以先到者为准)的主要原因。

每个键 900 字节时,每页最多可以有 8 个索引条目。当您减少每页的最大索引条目数时,您会大大增加存储任何给定索引所需的级别数。键大小越小,索引的效率就越高,因为它需要的数据页越少。

SQL Server 2016 起,非聚集索引的最大字节大小已增加到 1,700 字节和 32 列。