版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/21aspnet/article/details/89303988

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

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

存储引擎

索引类型

主键叶子节点

非主键叶子节点

MyISAM

非聚簇

数据地址

数据地址

InnoDB

聚簇

全部数据

主键值

key重复

不能

问题:InnoDB和MyISAM选那个?

MySQL5.6以后选InnoDB。

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

名词解释

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聚集索引 myisam_一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM相关推荐

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

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

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

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

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

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

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

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

  5. mysql 堆表_Mysql聚集索引和非聚集索引(堆组织表和索引组织表)

    Mysql聚集索引和非聚集索引(堆组织表和索引组织表) 1.堆组织表(HOT)和索引组织表(IOT)有什么区别? myisam使用的堆组织表(Heap Organize Table, HOT),没有聚 ...

  6. mysql 重复率高字段 索引,为什么重复值高的字段不能建索引(+聚集索引和非聚集索引)...

    ?一.原因: -?非聚簇索引存储了对主键的引用,如果?select?字段不在非聚簇索引内,就需要跳到主键索引. -?如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个 ...

  7. Mysql聚集索引和非聚集索引(堆组织表和索引组织表)

    1.堆组织表(HOT)和索引组织表(IOT)有什么区别? myisam使用的堆组织表(Heap Organize Table, HOT),没有聚集索引的概念,使用B-tree索引的存储格式,显示都是随 ...

  8. 【MySQL】MySQL的存储引擎和索引详解(聚集索引和非聚集索引)

    目录 一.MySQL存储引擎 1.1  Innodb引擎 1.2 MyISAM引擎 1.3 InNoDB与MyISAM异同 1.4 两种引擎的选择 二.索引(Index) 2.1 InnoDB存储引擎 ...

  9. mysql中聚集索引和非聚集索引区别

    区别一: 聚集索引:就是以主键创建的索引,在叶子节点存储的是表中的数据 非聚集索引:就是以非主键创建的索引(也叫做二级索引),在叶子节点存储的是主键和索引列. 区别二: 聚集索引中表记录的排列顺序和索 ...

最新文章

  1. 死锁产生条件-请求和保持条件
  2. 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍...
  3. python微信库wxpy_使用wxpy这个基于python实现的微信工具库的一些常见问题
  4. python导入csv文件-python如何导入csv文件格式
  5. openpyxl模块_Openpyxl让Excel飞(一)
  6. netty的使用场景,线程模型以及如何在springboot中使用netty?
  7. sql server 2005 T-SQL @@TOTAL_WRITE (Transact-SQL)
  8. Issure: LookupError: unknown encoding: cp65001
  9. go+beego+gorilla实现上传保存图片
  10. 银行家算法01--安全性检查 (操作系统)
  11. 心情好,贴一小段自己写的VBS服务器端过程,做了适度封装
  12. jbox弹窗_Jquery多功能提示通知弹出对话框插件jBox中文文档
  13. [3DsMAX]建模软件的分享
  14. 手机进水开机android,手机进水后开机只有启动画面进不了桌面怎么处理?
  15. 深度理解RNN的梯度消失和LSTM为什么能解决梯度消失
  16. 2024在职考研|MBA/MPA/MEM管理类硕士报考流程及基础问题扫盲
  17. 大型生鲜配送企业如何做到快速分拣商品?
  18. 图灵机器人 mysql_如何在微信小程序中制作图灵机器人?
  19. NginX and Riak
  20. Linux系统编程 / 分析开源软件Triggerhappy

热门文章

  1. 浅析基于 Serverless 的前后端一体化框架
  2. 对话阿里敏捷教练 | 成功辅导过淘宝、闲鱼,他都是如何帮助团队
  3. 天桥调参师秘籍:一份深度学习超参微调技术指南
  4. Gartner:企业机构需重新定义网络安全领导者角色
  5. 麒麟信安:根植于openEuler,走操作系统自主创新之路
  6. 华为云专属月·行业深耕专项行动正式开启
  7. Java面试高频题:Spring Boot+JVM+Nacos高并发+高可用已撸完​
  8. 央视315曝光SDK事件,应用开发者如何避坑?
  9. 国产数据库技术全面破冰,金融核心系统打破国外巨头垄断指日可待
  10. 华为发布基于自进化AI的HiSec Insight安全态势感知系统