我试图了解索引varchar列的含义。如果列长度为150个字符,那么索引是如何存储的?例如,我理解在索引int列时如何使用btree,但varchar是多个字符,索引本质上是由char [1]组成的复合索引,然后是char [2]等?
为了使示例简单,如果我有AAA,AAB,ABB,ABC等值,那么索引结构会是什么样子?
答案 0 :(得分:5)
您的varchar(150)
列值将按字母顺序排序(由您使用的排序规则定义),作为字符串(而不是字符数组)。所以基本上,最后,你有一长串的排序字符串。
然后以平衡的btree方式安排此列表。索引的每个级别指向另一个级别,索引条目的值定义每个较低级别索引页面上包含的值范围。
通过这种安排,只需几次页面读取,SQL Server将达到索引的叶级别并能够获取您的数据。实际上,字符串被解释为原子字符串 - 而不是字符或任何东西的化合物。
基本上,索引的结构看起来很像SQL Server Index Basics中显示的结构 - 只是代替数值,你的索引页中会有字符串值。