mysql聚集索引和聚簇索引,mysql聚合索引

mysql聚集索引和聚簇索引,mysql聚合索引,MySQL索引之聚集索引介绍

在MySQL中,InnoDB引擎表是一个聚集索引组织表,而MyISAM引擎表是一个堆组织表。

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

在MySQL中,InnoDB引擎表是一个聚集索引组织表,而MyISAM引擎表是一个堆组织表。

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

当然聚簇索引的概念不是MySQL独有的,其他数据库系统也有。

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

让我们先来看看这两种存储形式的区别:

简单来说,IOT表中数据的物理存储顺序与主键索引的顺序是一致的,所以如果新增的数据是离散的,那么数据块就倾向于离散的,而不是顺序的。而热表数据写入的顺序按照写入时间的顺序存储。

IOT表相比HOT表的优势是:

范围查询效率更高;

当数据更新频繁时(聚集索引本身不更新),产生碎片的可能性较小;

特别适合少量热数据频繁读写的场景;

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

IOT表的缺点是:

如果数据的变化主要是离散的,效率会比热表差;

热台的缺点是:

读回索引表开销很大;

大部分数据是随机读取的,无法顺序读取,成本高。

每个InnoDB表只能创建一个聚集索引,一个聚集索引可以包含一个或多个列。

如上所述,InnoDB是一个聚集索引组织表,其聚集索引选择规则如下:

首先,选择显式定义的主键索引作为聚集索引。

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

如果没有,使用InnoDB引擎内置的ROWID作为聚集索引;

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

图片来自高性能MySQL

可以看到,在这个索引结构的叶节点中,节点的键值是主键的值,而节点的值则存储了其他列数据,以及ROWID、回滚指针、trx id等附加信息。

结合这个图和上面可以知道,在InnoDB表中,它的聚集索引相当于整个表,整个表也是一个聚集索引。主键必须是聚集索引,但聚集索引不一定是主键。

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • pymysql菜鸟教程,pymysql 使用
  • pymysql菜鸟教程,pymysql 使用,pymysql模块使用简介与示例
  • mysql锁实现,mysql锁算法
  • mysql锁实现,mysql锁算法,MySQL锁机制与用法分析
  • mysql连接报错10061,mysql连接错误10060
  • mysql连接报错10061,mysql连接错误10060,MYSQL无法连接 提示10055错误的解决方法
  • mysql连接报10060错误,mysql连接报错10055
  • mysql连接报10060错误,mysql连接报错10055,MySQL连接异常报10061错误问题解决
  • mysql辅助索引和主键索引,mysql 主键 外键 索引
  • mysql辅助索引和主键索引,mysql 主键 外键 索引,MySQL索引之主键索引
  • MySQL语句大全,mysql常见语句总结
  • MySQL语句大全,mysql常见语句总结,MySQL语句整理及汇总介绍
  • mysql触发器的使用方法实验报告,mysql中触发器的使用
  • 留言与评论(共有 条评论)
       
    验证码: