聚集索引和非聚集索引以及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的InnoDB和MyISAM相关推荐

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

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/21aspnet/article/details/89303988 聚集索引和非聚集索引以及MySQL的 ...

  2. 聚集索引和非聚集索引详解 (zhuang)

    SQL中.聚集索引和非聚集索引有何区别? 聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个 ...

  3. SQLSERVER聚集索引与非聚集索引的再次研究(下)

    上篇主要说了聚集索引和简单介绍了一下非聚集索引,相信大家一定对聚集索引和非聚集索引开始有一点了解了. 这篇文章只是作为参考,里面的观点不一定正确 上篇的地址:SQLSERVER聚集索引与非聚集索引的再 ...

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

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

  5. 关于SQL 数据库表中的聚集索引和非聚集索引等

    原文地址:http://www.cppblog.com/zuoyinbo/archive/2008/06/03/52075.html          1.概念          索引是在数据库表或者 ...

  6. 聚集索引和非聚集索引- -

    聚集索引和非聚集索引- - 此文章引自http://www.vckbase.com/document/viewdoc/?id=1307 1.什么是聚集索引和非聚集索引 SQL SERVER提供了两种索 ...

  7. 聚集索引与非聚集索引的总结

    一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引.这篇文章会总结SQL Se ...

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

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

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

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

最新文章

  1. CSS和HTML做好看的界面
  2. linux centos 挂载ntfs文件系统
  3. 牛客网 PAT 算法历年真题 1003: 数素数 (20)
  4. Silverlight数据绑定之DataGrid
  5. 关于不同用户进入系统报错的请求
  6. 负载均衡Ribbon和Feign---SpringCloud
  7. 企业是否应该实现对客户需求的快速响应_CRM系统给企业带来的创新有哪些?如何让销售爱用CRM系统?...
  8. (2)vue.js介绍
  9. .net操作xml小结 (转)
  10. CMD下netstat ping等命令提示:不是内部或外部命令,也不是可运行的程序或批处理文件。
  11. js实现正方体旋转动画
  12. Apache DolphinScheduler 2.X保姆级源码解析
  13. java获取ip地址 方法_java获取IP地址的方法
  14. 数字中国 · 青云科技:数字化转型过程中企业如何用好云计算?
  15. idea修改代码仓库地址和用户密码
  16. mate7tl10是Android,华为Mate 7 MT7-TL10官方线刷包安卓5.1.1Rom刷机包
  17. base64格式图片数据转为图片格式
  18. 高斯消元——解线性方程组+球形空间产生器+开关问题
  19. JAVA jdk8安装
  20. 读书笔记005:南怀瑾:如何做到精神内敛?

热门文章

  1. filco linux 蓝牙,挖矿知识普及(一)Filcoin是怎么被挖出来的?
  2. html5 data url,HTML5 / Javascript – DataURL到Blob和Blob到DataURL
  3. PCL:超详细的基于法向量和曲率的区域生长算法原理以及源码解读
  4. 和12岁小同志搞创客开发:如何选择合适的传感器?
  5. 深度学习 -- TensorFlow(项目)验证码生成与识别(多任务学习)
  6. 基于C++CUDA实现全景图(2:1 Equirectangular Image)转换为天空盒图像
  7. OpenResty中的upstream healthcheck功能沉思录
  8. curl: (3) [globbing] error: bad range specification after pos 150的解决方法
  9. Blender+SP+UE5游戏艺术工作流程学习
  10. LFSR 和 m序列