sql-server - varchar 索引是如何存储的?

标签 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 方式排列此列表。索引的每个级别向下指向另一个级别,并且索引条目的值定义每个较低级别索引页面上包含的值范围。

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

基本上,索引的结构看起来很像 SQL Server Index Basics 中所示的结构。 - 索引页中只有字符串值,而不是数值。

关于sql-server - varchar 索引是如何存储的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514273/

相关文章:

sql-server - 授予对 INFORMATION_SCHEMA 的访问权限

sql - 按日期选择数据并汇总数据 - SQL Server 2005

sql - 使用 SQL Server 替换函数替换字符串 - 字符串超过 4000 个字符 - 怎么办?

sql - 消除SQL中的重复记录

c# - SaaS 应用程序需要将数据导出/备份到各个客户站点

.net - SQL Server 集群故障转移编程

sql - 如何从sql server中给定邮政编码和给定半径(以英里为单位)附近的表中获取所有其他邮政编码或(纬度和经度)?

sql - 创建没有主键的外键

sql - 如何从另一台服务器访问我的数据库

由于引号,SQL to XML 无法创建正确的 XMLNAMESPACE(我认为)