聚集索引

简介:

之前已经介绍过,innodb存储引擎是索引组织表,即表中数据按照主键顺序存放

 

而聚集索引(clustered index)就是按照每张表的主键构造的一颗B+树,同时叶子节点中存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页

 

聚集索引的这个特性决定了索引组织表中数据也是索引的一部分

 

同B+树数据结构一样,每个数据页都通过一个双向链表来进行链接。

 

由于实际的数据页只能按照一颗B+树进行排序,因此每张表只能拥有一个聚集索引。在多少情况下,查询优化器倾向于采用聚集索引。因为聚集索引能够在B+树索引的叶子节点上直接找到数据。此外,由于定义了数据的逻辑顺序,聚集索引能够特别快速的访问针对范围值的查询。查询优化器能够快速发现某一段范围的数据页需要扫描。

许多数据库的文档会告诉读者:聚集索引按照顺序物理的存储数据。如果看上图,可能也会有这样的感觉。但是试想一下,如果聚集索引必须按照特定的顺序存放物理记录,则维护成本显得非常之高。所以聚集索引的存储并不是物理上连续的,而是逻辑上连续的。这其中有两点:一是前面说过的页通过双向链表链接,页按照主键的顺序排序;另一点是每个页中的记录也是通过双向链表进行维护的,物理存储上可以同样不按照主键存储???(考虑主键索引和聚集索引重合和不重合的情况)(见mysql高性能163页(整页详读))mysql内建的存储引擎还不支持选择哪个索引作为聚簇索引,所以只能通过主键聚集数据。Innodb只聚簇同一个页面中的记录。包含相邻键值的页面可能会相聚甚远

目录
相关文章
|
2月前
|
存储 索引
聚集索引与非聚集索引的区别
聚集索引与非聚集索引的区别
|
9月前
|
存储 数据库 索引
聚簇索引和非聚簇索引
聚簇索引和非聚簇索引
58 0
|
9月前
|
存储 Oracle 关系型数据库
主键索引是聚集索引还是非聚集索引
在聚簇索引中,主键索引的叶子节点存储的就是数据行本身,因此主键索引也被称为聚簇索引。在这种情况下,主键索引的物理顺序与数据行的物理顺序是一致的,这样可以提高查询性能和范围查询的效率。
71 0
|
10月前
|
存储 SQL 算法
聚簇索引和非聚簇索引区别
聚簇索引和非聚簇索引区别
89 0
|
10月前
|
存储 缓存 算法
聚簇索引和非聚簇索引的区别
聚簇索引和非聚簇索引的区别
78 0
|
存储 关系型数据库 MySQL
mysql索引(三)聚集索引与非聚集索引(辅助索引)
Mysql中常用的两个存储引擎innodb和mysiam的索引是不同的。 聚集索引就是以主键创建的索引 非聚集索引就是除了主键以外的索引。非聚集索引也叫做二级索引,不用纠结那么多名词,将其等价就行了。非聚集索引在建立的时候也未必是单列的,可以多个列来创建索引。
230 0
mysql索引(三)聚集索引与非聚集索引(辅助索引)
|
存储 安全 关系型数据库
Innodb,MyIsam,聚集索引和非聚集索引
1.Innodb和Myisam是什么和区别 Innodb和Myisam是两种类类型,在navicat中可以看到,也可以修改。
156 0
Innodb,MyIsam,聚集索引和非聚集索引
|
存储 关系型数据库 MySQL