如何存储varchar索引



我试图了解索引varchar列的含义。如果列有150个字符长,索引是如何存储的?例如,我理解在索引int列时如何使用b树,但是varchar是多个字符,索引本质上是由char[1]组成的复合索引,然后是char[2],等等?

为了简化示例,如果我有AAA、AAB、ABB、ABC等值,索引结构会是什么样子?

您的varchar(150)列值将按字母顺序排序(由您使用的排序规则定义),作为字符串(而不是字符数组)。基本上,最后,你有一个排序字符串的长列表。

这个列表然后以均衡的b树方式排列。索引的每一层都指向另一层,索引项的值定义了每个较低级别的索引页所包含的值范围。

在这种安排下,只需几个页读取,SQL Server就可以到达索引的叶子级,并能够获得数据。所以实际上,字符串被解释为原子字符串-而不是字符的化合物或任何东西。

基本上,索引的结构看起来很像SQL Server索引基础中所示的结构-只是在索引页面中使用字符串值而不是数值。

最新更新