Sql server 如何存储varchar索引?
我试图了解索引varchar列的含义。如果列的长度为150个字符,那么索引是如何存储的?例如,我了解在索引int列时如何使用btree,但varchar是多个字符,索引本质上是由char[1],然后是char[2]等组成的复合索引吗 为了简化示例,如果我有值AAA、AAB、ABB、ABC等,索引结构会是什么样子?您的Sql server 如何存储varchar索引?,sql-server,sql-server-2008,sql-server-2005,indexing,Sql Server,Sql Server 2008,Sql Server 2005,Indexing,我试图了解索引varchar列的含义。如果列的长度为150个字符,那么索引是如何存储的?例如,我了解在索引int列时如何使用btree,但varchar是多个字符,索引本质上是由char[1],然后是char[2]等组成的复合索引吗 为了简化示例,如果我有值AAA、AAB、ABB、ABC等,索引结构会是什么样子?您的varchar(150)列值将按字母顺序(由您使用的排序规则定义)排序,作为字符串(而不是字符数组)。因此,基本上,最后,您有一个排序字符串的长列表 然后以平衡的btree方式排列此
varchar(150)
列值将按字母顺序(由您使用的排序规则定义)排序,作为字符串(而不是字符数组)。因此,基本上,最后,您有一个排序字符串的长列表
然后以平衡的btree方式排列此列表。索引的每个级别都指向另一个级别,索引项的值定义了每个较低级别索引页上包含的值范围
通过这种安排,只需几次页面读取,SQL Server就可以达到索引的叶级别,并能够获取您的数据。所以实际上,字符串被解释为原子字符串,而不是字符的复合词或任何东西
基本上,索引的结构与中所示的结构非常相似-仅在索引页面中有字符串值,而不是数字值。如果您将问题放在这里,您可能会得到更好的回答,