MySQL索引之聚集索引介绍

作者:mdxy-dxy 时间:2024-01-24 10:02:44 

在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别?

在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。

也有人把聚集索引称为聚簇索引。

当然了,聚集索引的概念不是MySQL里特有的,其他数据库系统也同样有。

简言之,聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序,而非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。

我们先来看看两种存储形式的不同之处:

简单说,IOT表里数据物理存储顺序和主键索引的顺序一致,所以如果新增数据是离散的,会导致数据块趋于离散,而不是趋于顺序。而HOT表数据写入的顺序是按写入时间顺序存储的。

IOT表相比HOT表的优势是:

范围查询效率更高;

数据频繁更新(聚集索引本身不更新)时,更不容易产生碎片;

特别适合有一小部分热点数据频繁读写的场景;

通过主键访问数据时快速可达;

IOT表的不足则有:

数据变化如果是离散为主的话,那么效率会比HOT表差;

HOT表的不足有:

索引回表读开销很大;

大部分数据读取时随机的,无法保证被顺序读取,开销大;

每张InnoDB表只能创建一个聚集索引,聚集索引可以由一列或多列组成。

上面说过,InnoDB是聚集索引组织表,它的聚集索引选择规则是这样的:

首先选择显式定义的主键索引做为聚集索引;

如果没有,则选择第一个不允许NULL的唯一索引;

还是没有的话,就采用InnoDB引擎内置的ROWID作为聚集索引;

我们来看看InnoDB主键索引的示意图:

MySQL索引之聚集索引介绍

图片来自高性能MySQL

可以看到,在这个索引结构的叶子节点中,节点key值是主键的值,而节点的value则存储其余列数据,以及额外的ROWID、rollback pointer、trx id等信息。

结合这个图,以及上面所述,我们可以知道:在InnoDB表中,其聚集索引相当于整张表,而整张表也是聚集索引。主键必然是聚集索引,而聚集索引则未必是主键。

MyISAM是堆组织表,它没有聚集索引的概念。

标签:聚集索引
0
投稿

猜你喜欢

  • JS与Ajax Get和Post在使用上的区别实例详解

    2024-04-23 09:07:40
  • SQL Server从安装到建库为新手寻找捷径

    2009-01-13 13:22:00
  • Yii配置文件用法详解

    2024-05-11 09:55:39
  • python使用pandas处理excel文件转为csv文件的方法示例

    2021-09-13 07:15:52
  • 基于python(urlparse)模板的使用方法总结

    2022-10-08 19:56:50
  • BootStrap创建响应式导航条实例代码

    2023-08-09 02:09:55
  • Vue中子组件调用父组件的3种方法实例

    2024-05-13 09:08:18
  • 解决Python报错:SyntaxError: invalid character ‘,‘ (U+FF0C)

    2023-01-24 06:12:57
  • python将多个文本文件合并为一个文本的代码(便于搜索)

    2021-10-23 07:21:27
  • oracle chm帮助文件下载

    2010-07-16 12:49:00
  • Python pickle类库介绍(对象序列化和反序列化)

    2021-12-31 00:28:33
  • 人脸识别实战之Opencv+SVM实现人脸识别

    2021-01-06 09:32:13
  • Requests什么的通通爬不了的Python超强反爬虫方案!

    2022-02-13 18:43:45
  • ASP.NET MVC4入门教程(六):验证编辑方法和编辑视图

    2024-05-13 09:15:36
  • Golang收支记账程序详细编写过程

    2024-04-25 15:17:38
  • OpenCV哈里斯角检测|Harris Corner理论实践

    2021-03-22 02:06:10
  • Python实现的自定义多线程多进程类示例

    2023-11-16 08:52:15
  • Pandas出现KeyError的问题解决及分析

    2023-07-01 16:37:22
  • python3实现带多张图片、附件的邮件发送

    2023-05-11 06:51:10
  • 详细介绍Python的鸭子类型

    2023-07-14 10:28:17
  • asp之家 网络编程 m.aspxhome.com