Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何存储varchar索引?_Sql Server_Sql Server 2008_Sql Server 2005_Indexing - Fatal编程技术网

Sql server 如何存储varchar索引?

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个字符,那么索引是如何存储的?例如,我了解在索引int列时如何使用btree,但varchar是多个字符,索引本质上是由char[1],然后是char[2]等组成的复合索引吗

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

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

然后以平衡的btree方式排列此列表。索引的每个级别都指向另一个级别,索引项的值定义了每个较低级别索引页上包含的值范围

通过这种安排,只需几次页面读取,SQL Server就可以达到索引的叶级别,并能够获取您的数据。所以实际上,字符串被解释为原子字符串,而不是字符的复合词或任何东西


基本上,索引的结构与中所示的结构非常相似-仅在索引页面中有字符串值,而不是数字值。

如果您将问题放在这里,您可能会得到更好的回答,