`
kevin_li0719
  • 浏览: 4099 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

聚簇索引与非聚簇索引的区别

阅读更多

通常情况下,建立索引是加快查询速度的有效手段。但索引不是万能的,靠索引并不能实现对所有数据的快速存取。事实上,如果索引策略和数据检索需求严重不符的话,建立索引反而会降低查询性能。因此在实际使用当中,应该充分考虑到索引的开销,包括磁盘空间的开销及处理开销(如资源竞争和加锁)。例如,如果数据频繁的更新或删加,就不宜建立索引。

    本文简要讨论一下聚簇索引的特点及其与非聚簇索引的区别。
  • 建立索引:
在SQL语言中,建立聚簇索引使用CREATE INDEX语句,格式为:CREATE CLUSTER INDEX index_name ON table_name(column_name1,column_name2,...);
  • 存储特点:
  1. 聚集索引。表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。
  2. 非聚集索引。表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。
    总结一下:聚集索引是一种稀疏索引,数据页上一级的索引页存储的是页指针,而不是行指针。而对于非聚集索引,则是密集索引,在数据页的上一级索引页它为每一个数据行存储一条索引记录。
  • 更新表数据
1、向表中插入新数据行
    如果一张表没有聚集索引,那么它被称为“堆集”(Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加到表的末尾位置。而建立了聚簇索引的数据表则不同:最简单的情况下,插入操作根据索引找到对应的数据页,然后通过挪动已有的记录为新数据腾出空间,最后插入数据。如果数据页已满,则需要拆分数据页,调整索引指针(且如果表还有非聚集索引,还需要更新这些索引指向新的数据页)。而类似于自增列为聚集索引的,数据库系统可能并不拆分数据页,而只是简单的新添数据页。

2、从表中删除数据行

    对删除数据行来说:删除行将导致其下方的数据行向上移动以填充删除记录造成的空白。如果删除的行是该数据页中的最后一行,那么该数据页将被回收,相应的索引页中的记录将被删除。对于数据的删除操作,可能导致索引页中仅有一条记录,这时,该记录可能会被移至邻近的索引页中,原索引页将被回收,即所谓的“索引合并”。

 

聚集索引、非聚集索引

什么是聚集索引??

汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”开头的部分仍然找不到这个字,那么就说明您的字典中没有这个字;同样的,如果查“张”字,那您也会将您的字典翻到最后部分,因为“张”的拼音是“zhang”。也就是说,字典的正文部分本身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。每个表只能有一个聚集索引,因为目录只能按照一种方法进行排序。
什么是非聚集索引??

 如果您认识某个字,您可以快速地从自动中查到这个字。但您也可能会遇到您不认识的字,不知道它的发音,这时候,您就不能按照刚才的方法找到您要查的字,而需要去根据“偏旁部首”查到您要找的字,然后根据这个字后的页码直接翻到某页来找到您要找的字。但您结合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的分别位于“张”字的上下方,现在您看到的连续的“驰、张、弩”三字实际上就是他们在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。

分享到:
评论

相关推荐

    005.聚簇索引与非聚簇索引b+树实现有什么区别?.mp4

    聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引...

    数据库中聚簇索引与非聚簇索引的区别[图文]

    而非聚簇索引的顺序与数据存储顺序无关,其索引条目通常包含指向数据行的指针。 聚簇索引的优势在于,当查询依据聚簇索引的键值进行时,可以直接定位到数据行,减少了磁盘I/O操作。然而,这也意味着表中数据的插入...

    MySQL 聚簇索引.rar

    在MySQL中,索引分为两种主要类型:聚簇索引(Clustered Index)和非聚簇索引(Secondary Index或Non-Clustered Index)。聚簇索引决定了数据行在磁盘上的物理存储方式,而非聚簇索引则不直接决定数据行的位置,而是...

    69 更新数据的时候,自动维护的聚簇索引到底是什么?l.pdf

    当聚簇索引建立之后,表中数据的物理顺序会与键值的逻辑顺序保持一致,这种特性使得基于键值的查询操作(特别是范围查询)速度非常快,因为数据几乎是有序存储的。 更新数据时,聚簇索引会自动维护。这意味着,当表...

    详解MySQL 聚簇索引与非聚簇索引

    1、聚集索引 表数据按照索引的顺序来存储的,也...对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。 从物理文件中也可以看出 MyISAM(非聚集索引)的索引文件.MYI

    mysql索引原理之聚簇索引1

    索引分为聚簇索引(Clustered Index)和非聚簇索引(Secondary Index)。聚簇索引决定了数据行在磁盘上的物理存储顺序,而非聚簇索引则不遵循这种顺序。 1、MySQL的索引: 在MySQL中,不同的存储引擎对索引的实现...

    行业-69 更新数据的时候,自动维护的聚簇索引到底是什么?l.rar

    与聚簇索引相对的是非聚簇索引(Non-Clustered Index),非聚簇索引并不影响数据的物理存储顺序,它只是一个指向实际数据行的指针列表。一个表可以有多个非聚簇索引,但每次查询时,非聚簇索引需要通过索引找到对应...

    SQL Server索引技术.pdf

    本文针对SQL Server的索引技术进行了详细的探讨,并提供了聚簇索引和非聚簇索引的详细信息。 聚簇索引是数据库索引的一种,它决定了表中数据的物理存储顺序。在聚簇索引中,数据行按照索引键的顺序存储在数据页上。...

    一篇文章讲清楚MySQL的聚簇-联合-覆盖索引、回表、索引下推.doc

    非聚簇索引(Non-Clustered Index)与聚簇索引不同,它的叶子节点中只存储了当前索引字段和主键 ID。假设我们在 age 字段上建一个普通索引,age 字段上面的索引存储结构就是非聚簇索引。 联合索引(Composite Index...

    B+树聚簇索引 精讲开发培训

    在MySQL中,B+树聚簇索引是常用的数据结构,尤其对于大规模数据的处理至关重要。本文将深入探讨索引的本质、分类,以及B+树的优势。 首先,理解索引的本质:索引是一种有序的数据结构,类似于字典中的目录,帮助...

    数据库实验索引的创建与使用.pdf

    我们也了解了聚簇索引和非聚簇索引的区别,并学习了如何删除索引。这些知识点对于数据库管理和设计都是非常重要的。 体会 通过本实验,我深刻地体会到了索引的重要性。索引可以帮助数据库管理系统快速地定位和检索...

    Sybase索引的使用和优化

    在建立非聚簇索引时,要权衡索引对查询速度的加快与降低修改速度之间的利弊。另外,还要考虑这些问题: * 索引需要使用多少空间。 * 合适的列是否稳定。 * 索引键是如何选择的,扫描效果是否更佳。 * 是否有许多...

    关于数据库中的索引原理

    - **多数量**:与聚簇索引相比,非聚簇索引的数量不受限制。 - **附加指针**:非聚簇索引中不仅包含了索引键,还包括指向实际数据行的指针。 - **不改变数据物理顺序**:非聚簇索引不会影响表中数据的物理顺序。 ##...

    MySQL优化技巧大揭秘实战课视频.zip

    2-3 聚簇索引与非聚簇索引区别 2-4 主键索引与唯一性索引 2-5 单字段索引与符合索引区别 2-6 二分查找算法 2-7 平衡二叉树算法 2-8 BTREE算法 2-9 Hash算法与Hash索引 3-1 explain介绍 3-2 explian中id属性介绍 3-3 ...

    SqlServer索引工作原理

    在非聚簇索引中,每行数据都有一个指针,指针与页相关,page4为4704开头,page5为4705开头。这样可以快速地定位数据。 SqlServer索引工作原理是通过树形结构或非树形结构来快速地定位和检索数据的。索引的作用是...

    sybase索引的使用和优化

    然而,过多的非聚簇索引可能导致更新操作变慢,需要权衡查询速度与更新速度之间的平衡。 3. 覆盖索引 (Covering Indexes) 覆盖索引是包含查询所需所有列的非聚簇索引,使数据库可以直接从索引中获取数据,无需访问...

    关于SQL Server中索引使用及维护简介

    2. **非聚簇索引**:非聚簇索引不改变数据物理顺序,而是保存索引列值和数据页指针,增加了额外的索引层。一张没有聚簇索引的表最多可有250个非聚簇索引。非聚簇索引适用于集合函数、join、order by和group by操作。...

    SQLServer索引调优实践

    #### 聚簇索引与非聚簇索引 - **聚簇索引(Clustered Index)**:数据行的物理顺序与索引的逻辑顺序相同。也就是说,聚簇索引决定了表中数据的存储顺序。 - **非聚簇索引(Non-Clustered Index)**:数据行的物理顺序与...

    SQL SERVER建立索引.pdf

    与聚簇索引相比,非聚簇索引更适合于查找特定值的查询,但可能不太适合范围查询,因为需要通过索引项指向的数据行进行查找。 #### 三、索引属性 - **复合索引**:可以同时基于多个列创建索引,称为复合索引。复合...

Global site tag (gtag.js) - Google Analytics