目录

​​​​​​​1、聚簇索引和非聚簇索引概念

2、聚簇索引和非聚簇索引的关系

3、聚簇索引和非聚簇索引的索引结构

3.1 非局促索引

3.2局促索引

3.3  INNODB和MYISAM的主键索引与二级索引的对比:


1、聚簇索引和非聚簇索引概念

聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据

非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

2、聚簇索引和非聚簇索引的关系

聚簇索引是物理有序的;非聚簇索引是逻辑有序,物理无序,在mysql中数据存储顺序就是聚簇索引的顺序,所以一个表只有一个聚簇索引,其他索引都是非聚簇的

如下图所示,一张表 聚簇索引和非聚簇索引的关系

非聚簇索引的叶子结点存储的是索引列的值,它的数据域是聚簇索引即ID,聚簇索引叶子结点存储的是对应的数据。聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一且非空的索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键(类似oracle中的RowId)来作为聚簇索引。如果已经设置了主键为聚簇索引又希望再单独设置聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可。

3、聚簇索引和非聚簇索引的索引结构

下面看一下聚簇索引(以Innodb为例)和非聚簇索引(以MyISAM-->三个文件是分开的为例)两种引擎的索引结构。

如原始数据为:

3.1 非局促索引

MyISAM引擎的数据存储方式如图:

MYISAM是按列值与行号来组织索引的。它的叶子节点中保存的实际上是指向存放数据的物理块的指针。
从MYISAM存储的物理文件我们能看出,MYISAM引擎的索引文件(.MYI)和数据文件(.MYD)是相互独立的。

3.2局促索引

而InnoDB按聚簇索引的形式存储数据,所以它的数据布局有着很大的不同。它存储数据的结构大致如下:

注:聚簇索引中的每个叶子节点包含主键值、事务ID、回滚指针(rollback pointer用于事务和MVCC)和余下的列(如col2)。

INNODB的二级索引与主键索引有很大的不同。InnoDB的二级索引的叶子包含主键值,而不是行指针(row pointers),这减小了移动数据或者数据页面分裂时维护二级索引的开销,因为InnoDB不需要更新索引的行指针。其结构大致如下:

3.3  INNODB和MYISAM的主键索引与二级索引的对比:

InnoDB的的二级索引的叶子节点存放的是KEY字段加主键值。因此,通过二级索引查询首先查到是主键值,然后InnoDB再根据查到的主键值通过主键索引找到相应的数据块。而MyISAM的二级索引叶子节点存放的还是列值与行号的组合,叶子节点中保存的是数据的物理地址。所以可以看出MYISAM的主键索引和二级索引没有任何区别,主键索引仅仅只是一个叫做PRIMARY的唯一、非空的索引,且MYISAM引擎中可以不设主键。

聚簇索引和非聚簇索引相关推荐

  1. mysql 聚簇索引和非聚簇索引_聚簇索引和非聚簇索引

    聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体细节依赖于其实现方式. MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和 ...

  2. 聚簇索引与非聚簇索引学习总结

    聚簇索引与非聚簇索引的区别 通常情况下,建立索引是加快查询速度的有效手段.但索引不是万能的,靠索引并不能实现对所有 数据的快速存取.事实上,如果索引策略和数据检索需求严重不符的话,建立索引反而会降低查 ...

  3. 聚簇索引、非聚簇索引、普通索引、唯一索引

    一.聚簇索引 VS 非聚簇索引 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buf ...

  4. 浅析聚簇索引与非聚簇索引(也叫二级索引)

    通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内 ...

  5. mysql 聚簇索引和非聚簇索引_MySQL学习之——索引

    转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...

  6. mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

    点击上方 小伟后端笔记 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 作者:小小木的博客来源:cnblogs.com/wyc1994666/p/10831039.html 序 开门见山,直接上图 ...

  7. 在mysql中建立聚簇索引_给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引...

    推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值,这是 ...

  8. 聚簇索引和非聚簇索引详解

    通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内 ...

  9. mysql 聚簇_mysql索引总结(3)-MySQL聚簇索引和非聚簇索引

    非聚簇索引 索引节点的叶子页面就好比一片叶子.叶子头便是索引键值. 先创建一张表: CREATE TABLE `user` ( `id`INT NOT NULL, `name`VARCHAR NOT ...

  10. java中簇如何表示_聚簇索引和非聚簇索引实际上是什么意思?

    我对DB的接触有限,只使用DB作为应用程序程序员. 我想了解Clustered和Non clustered indexes . 我搜索了一下,发现的是: 聚集索引是一种特殊的索引,它重新排序表中记录的 ...

最新文章

  1. LeetCode简单题之找到最近的有相同 X 或 Y 坐标的点
  2. 计算机控制系统开卷试卷,13自动化计算机控制技术考试A卷
  3. 经济学自身利益最大化_劳动经济学:研究劳动力市场运作的专业
  4. 二十四 Redis消息订阅事务持久化
  5. day 5 名片管理系统-文件版
  6. Xamarin.Form 超链接 用手势实现
  7. oracle添加男女约束,Oracle如何给数据库添加约束过程解析
  8. 计算机科学导论课后总结
  9. 谷歌浏览器无法上网,其他浏览器正常,换chrome搜索引擎
  10. 公司名称怎么申请专利
  11. 搭建ADSL自动拨号高匿代理池
  12. 【文献调研】三相DLMP的motivation调研
  13. http协议之response响应详解
  14. 使用 Docker 和 Nginx 打造高性能的二维码服务
  15. 海东市第一中学2021高考成绩查询,2021银川市地区高考成绩排名查询,银川市高考各高中成绩喜报榜单...
  16. linux下离线更新nessus漏洞插件的方法
  17. python与数据库连接语句_python 链接数据库语句
  18. “无实物尝百味”通过控制微电流刺激产生味觉—4.味觉模式实现篇
  19. 录音转文字实用工具(可互转)
  20. DTI数据处理与分析(一)——DTI概念

热门文章

  1. 漫画 | 垃圾回收实在是太垃圾了!
  2. 2023秋招英特尔Intel 软件/FPGA真题回忆录
  3. 学习优达学城《无人驾驶入门》,具体需要掌握哪些python知识点?
  4. Java框架面试题总结
  5. 如何从菜鸟快速变成3DsMAX大神?对如此庞大的软件,初学者应如何下手呢?
  6. 红榜 | 第十三期京东科技培训认证考试
  7. 阿里云服务器ECS共享型和企业级是什么?
  8. 万字长文:出海网赚的中场思考
  9. 开发了一个游戏卡顿OpenWrt路由器插件
  10. Android exfat移植指南