了解聚集索引

时间:2015-10-06 12:07:35

标签: sql sql-server indexing

由于PostgreSQL不支持聚簇索引,我正在考虑MSSQL服务器。我已经阅读了article比较聚簇索引和非聚簇索引。这篇文章的主旨是(强调我的):

  

非聚集索引存储值和实际指针   保存该值的行。

并且

  

聚簇索引不需要存储指向实际行的指针   因为表中的行存储在磁盘上   与聚集索引

完全相同的顺序

当我被告知therethere时,很难支持表格数据的 物理 排序,尤其是表格时在多个驱动器之间分开。而现在,我遇到了聚集索引概念,假设数据以某种顺序存储在物理上。这就是我所困惑的。

问题:什么是聚集索引结构?它是否支持tree - 类似于PosgtreSQLbtree索引进行遍历的结构?

2 个答案:

答案 0 :(得分:5)

在SQL Server中,索引被组织为B树。索引B树中的每个页面称为索引节点。 B树的顶部节点称为根节点。索引中的底层节点称为叶节点。根节点和叶节点之间的任何索引级别统称为中间级别。在聚簇索引中,叶节点包含基础表的数据页。根级和中级节点包含保存索引行的索引页。每个索引行都包含一个键值和一个指向B树中间级页面或索引叶级别中数据行的指针。索引每个级别的页面都链接在一个双向链表中。

聚簇索引在sys.partitions中有一行,索引使用的每个分区的index_id = 1。默认情况下,聚簇索引具有单个分区。当聚簇索引具有多个分区时,每个分区都有一个B树结构,其中包含该特定分区的数据。例如,如果聚簇索引有四个分区,则有四个B树结构;每个分区一个。

表示参考。

https://technet.microsoft.com/en-us/library/ms177443(v=sql.105).aspx http://www.sqlservercentral.com/blogs/practicalsqldba/2013/03/14/sql-server-part-4-explaining-the-non-clustered-index-structure-/

答案 1 :(得分:0)

在聚集索引中有三个级别

1.Root level

2.中级

3.Leaf level

聚簇索引包含叶级别的数据行。 如果您在索引列中搜索值,则查询引擎将首先查看根级别的值,如果该值在根级别可用,则查询引擎将不会进入中间级别或叶级别。如果该值不是基于根级别,那么它将搜索中间级别或叶级别的值。 如果数据行的数量太小,则聚集索引中没有可用的中间级别。

下图可以帮助您了解聚集索引的基本知识:

clustered index