聚集索引不是一种单独的索引类型,而是一种存储数据方式。其具体细节依赖于实现方式,但是InnoDB的聚集索引实际上在同样的结构中保存了B-Tree索引和数据行。
当表有聚集索引的时候,它的数据行实际保存在索引的叶子页中。术语“聚集”指实际的数据行和相关的键值都保存在一起。每个表只能有一个聚集索引,因为不能一次把行保存在两个地方。(但是,覆盖索引可以模拟多个聚集索引)
当前,SolidDB和InnoDB是唯一支持聚集索引的存储引擎。InnoDB按照主键进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。
聚集主键有助于性能,但是它也能导致严重的性能问题。
优点:
1.可以把相关数据保存在一起。
2.数据访问快。聚集索引把索引和数据都保存到同一棵B-Tree中,因此从聚集索引中取得数据通常在非聚集索引进行查找要快。
3.使用覆盖索引的查询可以使用包含在叶子节点中的主键值
如果表和查询可以使用它们,这些优点能极大地提高性能。
缺点:
1.聚集能最大限度地提升I/O密集负载的性能。如果数据能装入内存,那么其顺序也就无怕谓了,这样聚集就没什么用处。
2.插入速度严重依赖于插入顺序。按照主键的顺序插入行是把数据装入InnoDB表最快的方法。如果没有按照主键顺序插入数据,那么在插入之后最好使用OPTIMIZE TABLE重新组织一下表。
3.更新聚集索引列是昂贵的,因为它强制InnoDB把每个更新的迁移到新的位置。
3.建立在聚集索引上的表在插入新行,或者在行的主键被更新,该行必须被移动的时候会进行分页。分布发生在行的键值要求行必须被放到一个已经放满了数据的页的时候,此时存储引擎必须分页才能容纳该行。分页会导致表占用更多的磁盘空间
4.聚集表可能会比全表扫描慢,尤其在表存储得比较稀疏或因为分页而没有顺序存储的时候。
5.第二(非聚集)索引可能会比预想的大,因为它们的叶子节点包含了被引用行的主键列。
6.第二索引访问需要两次索引查找,而不是一次(叶子节点不会保存引用的行的物理位置,而是保持了行的主键值)
这意味着为了从第二索引查找行,存储引擎首先要找到叶子,然后使用保存在那里的主键值找到主键。最终找到行。这需要两次动作,两次B-Tree导航(在InnoDB中,自适应哈希索引能减少这种损失)
如果正在使用InnoDB并且不需要任何特定的聚集,就可以定义一个代理键。它是一种主键,但是值和应用程序无关。最简单的方法是使用AUTO_INCREMENT列。这会是顺序插入的并且能提高使用主键联接的性能,减少分页和碎片产生。
分享到:
相关推荐
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
### 索引介绍:聚集索引与非聚集索引 #### 一、索引的基本概念 在数据库中,索引是一种特殊的文件结构,它的主要目的是为了提高数据检索的速度。索引通过创建一种数据结构(例如B树)来实现这一点,这种结构允许...
在MySQL数据库中,索引是优化查询性能的关键工具,尤其对于InnoDB引擎,它采用了独特的聚集索引(Clustered Index)策略。聚集索引的概念并不是MySQL独有的,而是许多关系型数据库管理系统中的一个重要特性。理解...
4. **聚簇索引(聚集索引)**:这是一种特殊的数据存储方式,通常与主键相关联。InnoDB引擎中,聚簇索引将数据和索引存储在同一结构中,因此查询速度非常快。 5. **非聚簇索引**:与聚簇索引相对应,它们将索引和...
MySQL 的索引分为两种主要类型:MyISAM 使用非聚集索引,索引与数据分开存储,而 InnoDB 使用聚集索引,索引和数据在同一结构中,因此 InnoDB 的索引支持更快的查找,但不支持全文检索。在索引优化方面,最左前缀...
【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...
在MySQL中,一个表只能有一个聚集索引,因为它是根据行数据的物理顺序来组织的。聚集索引的主键索引实际上就是数据表的物理排列顺序,每条记录的主键值决定了其在磁盘上的位置。这意味着,如果你通过主键查询,可以...
一、MySQL索引 1. 索引类型:MySQL支持多种索引类型,包括B-Tree(默认索引类型)、Hash、Full-text(全文索引)以及R-tree(空间数据索引)。B-Tree索引适用于范围查询,而Hash索引适用于等值查询,Full-text索引...
这两种索引有不同的特点和适用场景,例如聚集索引可以更快地进行数据的检索和排序操作,而非聚集索引在进行范围查询时可能需要多次磁盘I/O操作。 索引使用策略及优化是数据库设计中的重要环节。合理的索引可以大幅...
* 按聚集类型划分:聚集索引、非聚集索引(也叫二级索引) * 按索引类型划分:普通索引、唯一索引、全文索引 * 按索引方法划分:BTREE索引、HASH索引 * 按索引列数划分:单列索引、组合索引 * 按作用划分:覆盖索引...
### MySQL索引、锁与事务详解 #### 一、索引 **索引定义与作用:** 索引是一种数据结构,用于加速数据检索的过程。它通过建立数据表中某些列的值与行的位置之间的映射关系,使得数据库系统能够快速定位到所需的...
非聚集索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表可以包含多个非聚集索引。 ### MySQL 索引的分类 MySQL 索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引。 #### 普通...
2. **非聚集索引**:非聚集索引(也称为辅助索引或二级索引)的索引键值独立于数据存储,每个索引条目包含键值和对应数据行的指针。非聚集索引的叶子节点通常存储了键值和主键值,而非完整数据行。 再者,从逻辑...
【MySQL索引详解】 在MySQL数据库管理系统中,索引是一种数据结构,用于快速查找数据库表中的特定记录。索引能够显著提升查询性能,减少数据检索的时间,尤其在处理大量数据时,其作用尤为明显。本文件"mysql索引共...
索引分为聚集索引和非聚集索引。 聚集索引(Clustered Index)是数据库表中数据实际存储的方式,决定了数据在磁盘上的物理顺序。由于数据行与索引键值在同一位置,因此一个表只能有一个聚集索引。当根据聚集索引...
4. 聚集索引与非聚集索引:聚集索引的叶子节点直接包含行数据,而非聚集索引的叶子节点包含指向数据行的指针。InnoDB的主键索引是聚集索引,其他索引是非聚集索引。 5. 复合索引:当查询涉及多个列时,创建复合索引...
MyISAM使用非聚集索引,数据和索引分开存储,而InnoDB使用聚集索引,索引和数据在同一结构中。 7. **如何使用索引** - **创建索引**:可以在创建表时指定,也可在创建后添加。 - **删除索引**:当不再需要索引时...