首页 > 编程知识 正文

sqlserver索引碎片,全局索引和本地索引的区别

时间:2023-05-04 00:42:41 阅读:9087 作者:87

SQLServer索引类型和索引导航

SQLServer名义上有两种索引:聚合索引和非聚合索引,但实际上内部有三种索引类型,分别是聚合索引,非聚合索引包括堆上的非聚合索引

物理数据的存储方式在聚合索引和非聚合索引中不同。 SQLServer遍历b树并到达最终数据的方式取决于三种索引类型。

所有SQLServer索引都有叶页和非叶页。 叶页和非叶页。 叶级是保存标识记录的“钥匙”,非叶级是导向叶级的。

索引构建在聚集表(具有聚集索引的表)中,或构建在堆(没有聚集索引的表)中。

提示:“如果集合索引不是唯一的,会怎么样呢? ”你可能会怀疑。 换句话说,如果聚合索引不唯一,该如何在聚合索引中唯一地标识行呢? 答案是隐藏的。 即使聚合索引不是唯一定义的,SQLServer也会强制所有聚合索引都是唯一的。 幸运的是,强制索引的唯一方法不会改变索引的使用方式。 如果需要,可以插入重复的行。 但是,SQLServer在内部向键添加后缀,以确保该行具有唯一标识符。

堆是没有聚合索引的表。 在这种情况下,唯一的标识符或行ID是基于该行的节、页面和行偏移(标题与该行之间的间隔)的组合创建的。 只有在没有聚合索引(如果没有聚合密钥)时才需要RID。

1聚集索引对于给定的表,每个聚集索引唯一的表只能有一个聚集索引。 并不需要集合索引。 但是,您会发现它是最经常被选为第一个索引的索引类型。 由于各种原因,查看索引类会非常明显。

聚合索引的特殊之处在于,叶级别是真正的数据。 也就是说,数据按照索引或相关键命令定义的物理顺序进行排序和存储。 这意味着一旦达到索引的叶级别,到达终点,这里就是真正的数据。 新记录以正确的物理顺序插入集合索引中。 创建新页面的方式取决于需要插入记录的地位。

如果需要将新记录插入索引结构的中间,则会发生正常的分页。 来自原始页面后半部分的记录将移动到新页面,新记录将相应地插入到新页面或旧页面中。

如果新记录在逻辑上位于索引结构的末尾,则会创建新页面。 但是,只有新记录被添加到新页面,如图所示。

在数量中,导航SQLServer中的索引以b树结构存储。 理论上,在b树分支的所有方向上总是有一半的剩余信息。 让我们看看聚合索引中的b树图标

可以看到,这实际上与一般的b树相同。 这里要做的是范围搜索。 收集索引可能特别擅长这种事情。 要搜索158—400之间的数字,请转至第一条记录,然后按照包含该页上所有剩馀记录的步骤进行操作。 (之所以知道需要此页的其余记录,是因为还需要来自上级节点信息中其他页面的数据。 因为这是一个有序的列表,所以地址可以确定它是连续的),这意味着如果有下一页应该包含的记录,这个页的其余记录一定要包含。 您可以开始从这些页面提取记录,而无需完成确认工作。 让我们从导航节点开始。 SQLServer可以根据存储为系统表的条目搜索节点。 通过查询sys.indexes,可以查看该表的逻辑内容。

注意:数据库中的每个索引在sys.indexes中都有一个条目。 “系统视图”是数据库的一部分,显示基于数据库中所有索引的存储位置信息及其列,而不是主数据库。 在旧版本的SQLServer上。 可以查基础表。 (技束可以这么做,但强烈建议本人不要直接调查。 )所谓的sysindexes表。

通过浏览作为根节点的页面,可以知道下一个要检查的页面是什么。 如图所示,确认第2级第2页。 然后,继续处理。 随着沿着树一步一步地下降,得到越来越小的数据子集。 最终,达到索引级别的叶级别。 在聚合索引中,达到索引的叶级别也意味着达到要查找的行和要查找的数据。

注意:关于区分的重要性,我已经强调了很多。 如果有聚合索引,则在完全浏览索引时完全浏览了自己的数据。 如果查看非聚集索引,则在聚集索引中创建非聚集索引时可以看到对性能的影响有多大。 2堆上的非聚合索引堆上的非聚合索引在各个方面都与聚合索引非常相似。 但是,这些确实有一些明显的区别。 叶级别是可以检索数据指针而不是数据的级别。 指针显示为索引指向的特定行的行标识符(RID )。 对于RID,必须知道索引由指向特定行的节、页面和行偏移组成。 叶级不是真正的数据,但有RID。 但是这里只比使用聚合索引多一步。 RID包含有关行地位的完整信息,因此可以直接访问数据。

33558 www.Shunyi.net/forum/view/id-48760

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。