Why does SQL Server add a 4 byte integer to non-unique clustered indexes

夙愿已清 提交于 2019-11-28 06:03:47

问题


It is possible to define non-unique columns as clustered as well as non-clustered indexes. However, SQL Server adds a 4 byte integer to the indexed columns in case of a clustered index, if the column is not defined as unique. This is done to keep the "uniqueness" of the record internally even though two or more records may have the value for that column. Why isn't this integer necessary in case of a non-clustered index?


回答1:


A non-clustered index already includes the clustered index column so it can reference the exact row that it correlates to. Hence with the uniquifier on the clustered index, the non-clustered index would also include the uniquifier.

A good explanation here: Understanding and Examining the Uniquifier in SQL Server




回答2:


I believe this has to do with the row locator.

Width of the nonclustered index row = Width of the nonclustered index column + Width of the clustered index column = size of column data type + size of column data type.



来源:https://stackoverflow.com/questions/12321905/why-does-sql-server-add-a-4-byte-integer-to-non-unique-clustered-indexes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!