聚簇索引和非聚簇索引
目录
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引擎中可以不设主键。
聚簇索引和非聚簇索引相关推荐
- mysql 聚簇索引和非聚簇索引_聚簇索引和非聚簇索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式.具体细节依赖于其实现方式. MySQL数据库中innodb存储引擎,B+树索引可以分为聚簇索引(也称聚集索引,clustered index)和 ...
- 聚簇索引与非聚簇索引学习总结
聚簇索引与非聚簇索引的区别 通常情况下,建立索引是加快查询速度的有效手段.但索引不是万能的,靠索引并不能实现对所有 数据的快速存取.事实上,如果索引策略和数据检索需求严重不符的话,建立索引反而会降低查 ...
- 聚簇索引、非聚簇索引、普通索引、唯一索引
一.聚簇索引 VS 非聚簇索引 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buf ...
- 浅析聚簇索引与非聚簇索引(也叫二级索引)
通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内 ...
- mysql 聚簇索引和非聚簇索引_MySQL学习之——索引
转自:CSDN MySQL是目前绝大多数互联网公司使用的关系型数据库,它性能出色.资源丰富.成本低廉,是快速搭建互联网应用的首选关系型数据库.但是,俗话说,"好马配好鞍",仅仅会使 ...
- mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引
点击上方 小伟后端笔记 ,选择 星标 公众号 重磅资讯.干货,第一时间送达 作者:小小木的博客来源:cnblogs.com/wyc1994666/p/10831039.html 序 开门见山,直接上图 ...
- 在mysql中建立聚簇索引_给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引...
推荐阅读:吊打面试官!MySQL灵魂100问,你能答出多少? MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储的是主键值,这是 ...
- 聚簇索引和非聚簇索引详解
通俗点讲 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内 ...
- mysql 聚簇_mysql索引总结(3)-MySQL聚簇索引和非聚簇索引
非聚簇索引 索引节点的叶子页面就好比一片叶子.叶子头便是索引键值. 先创建一张表: CREATE TABLE `user` ( `id`INT NOT NULL, `name`VARCHAR NOT ...
- java中簇如何表示_聚簇索引和非聚簇索引实际上是什么意思?
我对DB的接触有限,只使用DB作为应用程序程序员. 我想了解Clustered和Non clustered indexes . 我搜索了一下,发现的是: 聚集索引是一种特殊的索引,它重新排序表中记录的 ...
最新文章
- LeetCode简单题之找到最近的有相同 X 或 Y 坐标的点
- 计算机控制系统开卷试卷,13自动化计算机控制技术考试A卷
- 经济学自身利益最大化_劳动经济学:研究劳动力市场运作的专业
- 二十四 Redis消息订阅事务持久化
- day 5 名片管理系统-文件版
- Xamarin.Form 超链接 用手势实现
- oracle添加男女约束,Oracle如何给数据库添加约束过程解析
- 计算机科学导论课后总结
- 谷歌浏览器无法上网,其他浏览器正常,换chrome搜索引擎
- 公司名称怎么申请专利
- 搭建ADSL自动拨号高匿代理池
- 【文献调研】三相DLMP的motivation调研
- http协议之response响应详解
- 使用 Docker 和 Nginx 打造高性能的二维码服务
- 海东市第一中学2021高考成绩查询,2021银川市地区高考成绩排名查询,银川市高考各高中成绩喜报榜单...
- linux下离线更新nessus漏洞插件的方法
- python与数据库连接语句_python 链接数据库语句
- “无实物尝百味”通过控制微电流刺激产生味觉—4.味觉模式实现篇
- 录音转文字实用工具(可互转)
- DTI数据处理与分析(一)——DTI概念