专栏首页Java架构师必看一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM

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

聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,数据库

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

看这种图表就一切都明白了:

存储引擎

索引类型

主键叶子节点

非主键叶子节点

MyISAM

非聚簇

数据地址

数据地址

InnoDB

聚簇

全部数据

主键值

key重复

不能

问题:InnoDB和MyISAM选那个?

MySQL5.6以后选InnoDB。

看看官方文档是最权威的:https://dev.mysql.com/doc/refman/5.7/en/innodb-benefits.html

===========上面已经把这个高频问题说完了,下面是为了满足好学者所做的扩展============= 

名词解释

Clustered Index:聚集索引,又称聚簇索引。

Nonclustered indexes:非聚集索引,又称非聚簇索引。

Secondary Key:二级索引,因为聚集索引只能有一个,所有同一个表其他字段只能是二级索引也就是非聚集索引。

看看经典著作《高性能MySQL(第3版)》关于聚簇索引的说明:

再看看关于隐式创建聚簇索引的说明:

关于二级索引:

MyISAM的数据分布:

InnDB最关键的就是聚集索引叶子节点存所有的数据项,二级索引存的是主键值,而不是行指针,而MyISAM存的是行指针: 

下面是 InnoDB和MyISAM的索引数据存储分布,如图所示MyISAM是索引叶子节点有指针指向,而 InnoDB则直接存数据没用指针:

下面这个帖子也是写的极好的 ,作者很会画图,整体还是没用超越《高性能MySQL(第3版)》,如果上面的还看不懂可以看看此贴--《MySQL索引背后的数据结构及算法原理》。

MyISAM索引实现

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:

InnoDB索引实现

虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。

第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址:

mysql(23)

本文由来源 22,由 system_mush 整理编辑,其版权均为 22 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL常用性能分析方法-profile,explain,索引

    1.查版本号无论做什么都要确认版本号,不同的版本号下会有各种差异。>Select versio...

    Java架构师必看
  • memcacheq 服务安装与原理

    memcacheQ是一个单纯的分布式消息队列服务。它的安装依赖于BerkeleyDB和libe...

    Java架构师必看
  • MySQL索引原理及慢查询优化

    MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。

    Java架构师必看
  • 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中,MySQL的优化主要涉及SQL语句及索引的优化、数据表结构的优化、系统配置的优化和硬件的优化四个方面,如下图所示:

    李红
  • MySQL数据库规约.

    一、建表规约 1、表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是, 0 表示否) 。 2、表...

    JMCui
  • 美团点评广告实时索引的设计与实现

    美团技术团队
  • MySQL索引实现原理分析

    目前大部分数据库系统及文件系统都采用 B-Tree(B 树)或其变种 B+Tree(B+树)作为索引结构。B+Tree 是数据库系统实现索引的首选数据结构。

    desperate633
  • 神奇的 SQL 之 ICP → 索引条件下推

      正式讲 ICP 之前了,我们先将相关的概念捋一捋,知道的就当回顾,不知道的就当了解了,这有助于对 ICP 的理解

  • Mysql探索(一):B-Tree索引

    MySQL是目前业界最为流行的关系型数据库之一,而索引的优化也是数据库性能优化的关键之一。所以,充分地了解MySQL索引有助于提升开发人员对MySQL数...

    remcarpediem
  • 为什么大家都说“SELECT *”效率低?

    无论在工作还是面试中,关于 SQL 中不要用“SELECT *”,都是大家听烂了的问题,虽说听烂了,但普遍理解还是在很浅的层面,并没有多少人去追根究底,探究其原...

    架构师修炼

扫码关注云+社区

领取腾讯云代金券