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