http://blog.csdn.net/zhaohuabing/archive/2006/12/18/1447721.aspx
在学习和使用各种数据库的过程中,我们常常会遇到聚族索引、非聚族索引、组合索引的概念,这些索引对我们使用数据库,特别是查询的速度的影响是很大的,前
几天公司里来了一个sybase的工程师,通过他的讲解,我终于弄清楚了这几个概念的真正含义,觉得虽然问题很小,但收获满大,在这里和大家一起分享一
下。
一、什么是索引
索引可以理解为我们小时候使用的汉语字典的索引,如果想在字典中查找一个字,一页一页地翻字典查找是非常慢的,但如果使用字典的索引进行查询,很快就可以查到了。数据库的索引也是类似的。
数据库中的索引一般是按照B树来组织的,叶结点指向真正的数据,B树的定义我这里就不介绍了,有兴趣的话可以去翻翻数据结构的书。
二、聚族索引
在这里还是用字典来进行类比,一般来说汉语字典中有几种索引,如拼音、偏旁、笔画等。字典本身的组织也是排序的,我记得一般是按照拼音排序的。这里的拼音就是聚族索引。也就是说聚族索引的组织顺序和数据本身的组织顺序是一致的
,这也解释了数据库中只能定义一个聚族索引的原因,因为数据本身只能按一种方式进行排序。
那聚族索引有什么特别的好处呢,这个好处就是在数据库中执行查找一批数据的语句会比较快,因为数据已经按照聚族索引排好序了,很少的io操作就可以将数据
从库中取出。好比你在字典中查找发音从从a到c的汉字,只需要查到a的开始页和c的结束页,中间的所有页都符合查询要求,不用再一页一页地查找。
图1 聚族索引
三、非聚族索引
非聚族索引就好比字典里的偏旁、笔画索引,其
索引组织顺序和数据组织顺序不一致
,因此非聚族索引可以创建多个。当查找一条数据时,非聚族索引和聚族索引的效率相差不大,但查找一批数据(n)时,非聚族索引需要的io可能是聚族索引的n倍,因为非聚族索引需要一条一条地进行查找。
图2 非聚族索引
四、组合索引
组合索引在索引的key中保存了所有组成该组合索引的字段,但只按第一个字段进行排序
。
因为索引key中保存的内容增多,因此组合索引需要的空间一般来说比单字段索引大。组合索引的好处是假如你的查询需要返回的数据字段都在组合索引的索引字
段中,数据库将不会访问数据页,而直接返回索引中的字段值,可以加快查询速度。假如你的查询不满足这个条件,组合索引就是没有意义的,反而浪费了存储空
间。
图3 组合索引
分享到:
相关推荐
聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引b+树实现有什么区别?.mp4 聚簇索引与非聚簇索引...
- 当需要对多个列进行组合查询时,可以考虑建立复合非聚集索引。 #### 四、索引的性能比较 - **查询性能**:对于单列查询,聚集索引通常比非聚集索引快,因为它直接指向数据行。而对于多列查询,尤其是涉及到联合...
SQL Server 提供了两种索引:聚集索引(clustered index)和非聚集索引(nonclustered index)。本文将详细介绍聚集索引和非聚集索引的概念、区别、使用场景和误区。 聚集索引是一种特殊的目录,根据一定规则排列的...
在MySQL中,索引分为两种主要类型:聚簇索引(Clustered Index)和非聚簇索引(Secondary Index或Non-Clustered Index)。聚簇索引决定了数据行在磁盘上的物理存储方式,而非聚簇索引则不直接决定数据行的位置,而是...
当聚簇索引的根索引页(或顶层索引页)发生变化时,系统会创建新的索引页,并更新上层索引页的索引条目以指向新索引页和其中的最小主键值。这个过程确保了聚簇索引的结构能够适应数据的增长和变化。随着数据量的增加...
因此,合理地组合和使用聚集与非聚集索引,可以有效地平衡查询速度与存储开销。 创建和使用索引的示例代码如下: ```sql -- 不使用任何索引查询 Select * FROM IndexTestTable WHERE Status='B' -- 创建聚集索引 ...
数据库中的索引是提高查询效率的关键工具,主要分为聚簇索引和非聚簇索引。聚簇索引决定了数据的实际存储顺序,它的每个索引条目都直接指向数据行,因此一个表只能有一个聚簇索引。而非聚簇索引的顺序与数据存储顺序...
索引分为聚簇索引(Clustered Index)和非聚簇索引(Secondary Index)。聚簇索引决定了数据行在磁盘上的物理存储顺序,而非聚簇索引则不遵循这种顺序。 1、MySQL的索引: 在MySQL中,不同的存储引擎对索引的实现...
在数据库领域,索引分为两大类:**聚焦索引(Clustered Index)**和**非聚焦索引(Non-clustered Index)**。 #### 二、聚焦索引详解 聚焦索引是一种特殊类型的索引,其键值的逻辑顺序直接决定了表中数据行的物理顺序...
非聚集索引在查询性能上很有优势,尤其是对于多列联合索引和范围查询,但它们会占用额外的存储空间,并且在插入、删除和更新时可能需要维护索引。 接着是**聚集索引**。聚集索引决定了数据在表中的物理存储顺序。在...
Sybase 索引的使用和优化 Sybase 索引的使用和优化...在实际应用中,我们可以根据实际情况选择适合的索引类型,例如聚簇索引、非聚簇索引、覆盖索引等,并且根据实际情况对索引进行优化和调整,以达到最佳的查询性能。
从物理文件也可以看出 InnoDB(聚集索引)的数据文件只有数据结构文件.frm和数据文件.idb 其中.idb中存放的是数据和索引信息 是存放在一起的。 2、非聚集索引 表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点...
- **分区消除**:前缀和非前缀索引都支持索引分区消除,但前提是查询条件中需包含索引分区键。 - **唯一性约束**:本地索引只支持分区内的唯一性,如果要在表上设置唯一性约束,必须包含分区键列。 - **可用性**:...
非聚簇索引适合用于频繁的聚合函数查询、JOIN、ORDER BY 和 GROUP BY 操作。然而,过多的非聚簇索引可能导致更新操作变慢,需要权衡查询速度与更新速度之间的平衡。 3. 覆盖索引 (Covering Indexes) 覆盖索引是包含...
* 索引有两种类型,即聚簇索引和非聚簇索引。 * 聚簇索引与基表的物理顺序相同,非聚簇索引与基表的物理顺序不相同。 * 索引既可以直接创建,也可以间接创建。 * 可以在优化隐藏中使用索引。 * 使用查询处理器执行 ...
SqlServer索引工作原理可以分为两大类:聚簇索引和非聚簇索引。 聚簇索引是一种树形结构的索引,它的数据物理存储顺序和索引顺序一致的。聚簇索引的数据页是按照顺序排列的,例如按照LastName的顺序排列的。聚簇...
根据索引的数据存储方式不同,索引可以分为两大类:聚簇索引(Clustered Index)和非聚簇索引(Non-Clustered Index)。 - **聚簇索引**:聚簇索引决定了表中行的实际物理顺序。一个表只能有一个聚簇索引。 - **非...
一个表可以有多个非聚簇索引,但每次查询时,非聚簇索引需要通过索引找到对应的行号,然后再根据行号去数据页中获取数据,这个过程通常比聚簇索引慢一些。 当数据更新时,聚簇索引的维护至关重要。如果更新的字段是...