2011-12-15 62 views
2

我想了解索引varchar列的含義。如果列的長度爲150個字符,索引如何存儲?例如,我理解索引int列時如何使用btree,但varchar是多個字符,索引本質上是由char [1],char [2]等組成的複合索引?爲了簡單起見,如果我有值AAA,AAB,ABB,ABC等,索引結構是什麼樣子的?如何存儲varchar索引?

+0

如果你在這裏提出你的問題,你可能會得到更好的回覆http://dba.stackexchange.com/ – peter 2011-12-15 02:30:57

回答

4

您的varchar(150)列值將按字母順序(由您使用的排序規則定義)以字符串(不是字符數組)排序。所以基本上,最後,你有一個很長的已排序字符串列表。

此列表然後以平衡btree方式排列。索引的每個級別指向另一個級別,並且索引條目的值定義每個較低級別索引頁面上包含的值的範圍。

通過這種安排,只需幾次頁面讀取,SQL Server就會到達索引的葉級並能夠獲取數據。所以真的,字符串被解釋爲原子字符串 - 不是字符或任何東西的化合物。

基本上,索引的結構看起來很像SQL Server Index Basics中顯示的結構 - 只有在數字值不同的情況下,索引頁纔會有字符串值。