在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主键索引的示意图:

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

课课家结合这个图,以及上面所述,可以知道:在InnoDB表中,其聚集索引相当于整张表,而整张表也是聚集索引。主键必然是聚集索引,而聚集索引则未必是主键。MyISAM是堆组织表,它没有聚集索引的概念。

mysql创建聚集索引sql_MySQL之聚集索引相关推荐

  1. mysql主键创建非聚集索引_什么是聚集索引,非聚集索引,索引覆盖,回表,索引下推...

    聚集索引 我们先建如下的一张表 CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` var ...

  2. mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别

    一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...

  3. mysql创建非聚集索引_聚集索引和非聚集索引的区别

    作者:riemann riemann.blog.csdn.net/article/details/90324846 一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SE ...

  4. mysql创建非聚集索引_一文让你明白聚集索引和非聚集索引?

    我们知道Mysql底层使用的B+树来存储索引的,而且数据都存在叶子节点上.对于innodb来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引. ps:MyISAM的行记录是单独存储的,不和索引 ...

  5. mysql 创建聚集索引_索引为什么会加快Mysql的查询速度?

    为什么用了索引之后,查询就会变快? 相信很多程序员朋友对数据的索引并不陌生,最常见的索引是 B+ Tree 索引,索引可以加快数据库的检索速度,但是会降低新增.修改.删除操作的速度,一些错误的写法会导 ...

  6. sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)

    一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...

  7. mysql聚集索引_MySQL中怎样创建聚集索引和非聚集索引,求创建这两种索引的SQL语句。谢谢...

    ALTER TABLE t1 ADD INDEX(or CREATE INDEX) ALTER TABLE t1 ADD FULLTEXT INDEX ALTER TABLE t1 ADD COLUM ...

  8. 一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM

    聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了.所以今天在这里用最简短的语言让你明白这些 ...

  9. mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...

    什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...

最新文章

  1. jenkins配置git
  2. 无需卷积,完全基于Transformer的首个视频理解架构TimeSformer出炉
  3. oracle 学习笔记之触发器
  4. 笔记“SQL与Access”
  5. Eclipse的ExtJs智能提示
  6. CTFshow 爆破 web27
  7. HTML知识点总结之img、scirpt、link标签
  8. 如何创建自定义进度栏
  9. 开始《数据机构与算法之美》之旅
  10. c++远征之模板篇——运算符重载
  11. 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
  12. 喜庆新年春节 祝贺语词 艺术字体PSD分层素材
  13. 羽枭android,【答疑】Unreal Engine 4 是怎样发布android的? - 视频教程线上学
  14. 机器学习——KNN及代码实现
  15. 温习SQL server
  16. 用户 'sa' 登录失败。 连接SQL2000出现的问题。
  17. Unity mesh换装
  18. 也说类别Category
  19. Datawhale-机器学习算法-Task3 EM算法
  20. 懂计算机word的博主,2010 word 如何新建目录

热门文章

  1. 【安全知识分享】职业健康培训.pptx(附下载)
  2. 营销活动的8大工具,各大平台推荐
  3. 手工制作二维码,你也可以很专业!
  4. 2021年中国电视机行业供需及主要企业经营情况分析[图]
  5. QT基础:QFormLayout 列表布局简单演示
  6. 分布式部署 LNMP+WordPress
  7. .Net平台学习笔记(7)
  8. 利用汇编语言计算斐波那契数列
  9. BuildCommDCB 参数错误
  10. 从零开始学习信号完整性-9-电平接口(2)