mysql:InnoDB的主键采用聚簇索引,二级索引不采用聚簇索引_Helloworld先生的博客-CSDN博客_innodb采用的是聚簇索引。


本站和网页 https://blog.csdn.net/u010841296/article/details/77427175 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

mysql:InnoDB的主键采用聚簇索引,二级索引不采用聚簇索引_Helloworld先生的博客-CSDN博客_innodb采用的是聚簇索引。
mysql:InnoDB的主键采用聚簇索引,二级索引不采用聚簇索引
Helloworld先生
于 2017-08-20 10:51:25 发布
7696
收藏
19
分类专栏:
mysql
索引
文章标签:
mysql
索引
聚簇索引
mysql
同时被 2 个专栏收录
6 篇文章
1 订阅
订阅专栏
索引
1 篇文章
0 订阅
订阅专栏
原文链接
我的归纳: (1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。 (2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。因此,通过二级索引查询首先查到是主键值,然后InnoDB再根据查到的主键值通过主键索引找到相应的数据块。 (3)MyISAM的主键索引和二级索引叶子节点存放的都是列值与行号的组合,叶子节点中保存的是数据的物理地址 (4)MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址 (5)为什么用B+Tree 不是BTree: B-Tree:如果一次检索需要访问4个节点,数据库系统设计者利用磁盘预读原理,把节点的大小设计为一个页,那读取一个节点只需要一次I/O操作,完成这次检索操作,最多需要3次I/O(根节点常驻内存)。数据记录越小,每个节点存放的数据就越多,树的高度也就越小,I/O操作就少了,检索效率也就上去了。 B+Tree:非叶子节点只存key,大大滴减少了非叶子节点的大小,那么每个节点就可以存放更多的记录,树更矮了,I/O操作更少了。所以B+Tree拥有更好的性能。
下面是原文中对聚簇索引的介绍,介绍的很简单易懂:
1.聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。 一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。
在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的: 聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。
因此,MySQL中不同的数据存储引擎对聚簇索引的支持不同就很好解释了。
2.下面,我们可以看一下mysql中MYISAM和INNODB两种引擎的索引结构。
如原始数据为:
MyISAM引擎的数据存储方式如图:
(1)MYISAM是按列值与行号来组织索引的。它的叶子节点中保存的实际上是指向存放数据的物理块的指针。 从MYISAM存储的物理文件我们能看出,MYISAM引擎的索引文件(.MYI)和数据文件(.MYD)是相互独立的。
(2)而InnoDB按聚簇索引的形式存储数据,所以它的数据布局有着很大的不同。它存储数据的结构大致如下:
注:聚簇索引中的每个叶子节点包含主键值、事务ID、回滚指针(rollback pointer用于事务和MVCC)和余下的列(如col2)。
(3)INNODB的二级索引与主键索引有很大的不同。InnoDB的二级索引的叶子包含主键值,而不是行指针(row pointers),这减小了移动数据或者数据页面分裂时维护二级索引的开销,因为InnoDB不需要更新索引的行指针。其结构大致如下:
INNODB和MYISAM的主键索引与二级索引的对比:
(4)InnoDB的的二级索引的叶子节点存放的是KEY字段加主键值。因此,通过二级索引查询首先查到是主键值,然后InnoDB再根据查到的主键值通过主键索引找到相应的数据块。而MyISAM的二级索引叶子节点存放的还是列值与行号的组合,叶子节点中保存的是数据的物理地址。所以可以看出MYISAM的主键索引和二级索引没有任何区别,主键索引仅仅只是一个叫做PRIMARY的唯一、非空的索引,且MYISAM引擎中可以不设主键。
Helloworld先生
关注
关注
10
点赞
19
收藏
评论
mysql:InnoDB的主键采用聚簇索引,二级索引不采用聚簇索引
我的归纳:(1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。(2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。因此,通过二级索引查询首先查到是主键值,然后InnoDB再根据查到的主键值通过主键索引找到相应的数据块。
复制链接
扫一扫
专栏目录
MySQL面试:谈谈你对聚簇索引的理解
OceanStar的博客
10-18
4899
通俗的讲
聚簇索引:
将数据存储和索引放到了一块,找到了索引也就找到了数据
一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。
非聚簇索引:
将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行。
MyISAM通过key_buffer把索引先缓存到了内存中,当需要访问数据时(通过索引访问数据),在内存中直接查找索引,然后通过索引找到磁盘相应数据。这也就是为什么索引不在key buffer命中时,速度慢的原因。
澄清一个概念:
InnoDB中,在聚集索引上创建的索引
InnoDB存储引擎——聚簇索引
没差的博客
05-31
1016
之前学习了数据库实战45讲的前半部分,觉得应该需要停下来沉淀一下,过一阵子再去继续学习。
今天,来分析一下InnoDB存储引擎管理的InnoDB表如何基于聚簇索引建立的!
其实之前在学校的数据库课程上,我一直以为聚簇索引是一种索引类型,然后结合InnoDB存储引擎,自然而然的便认为聚簇索引即表中的B+树主键索引,殊不知一直理解的是错误的概念,前阵子在学习<高性能MySQL>这...
评论 1
您还未登录,请先
登录
后发表或查看评论
Mysql聚簇索引
最新发布
qq_37933128的博客
10-07
912
而用‘偏旁部首’查汉字,就是非聚集索引,因为正文中的字并不是按照偏旁部首排序的,我们通过检字表得到正文中的字在索引中的映射,然后通过映射找到所需要的字。也就是说聚集索引的顺序就是数据的物理存储顺序。它会根据聚集索引键的顺序来存储表中的数据,即对表的数据按索引键的顺序进行排序,然后重新存储到磁盘上。聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。聚集索引会降低 insert,和update操作的性能,所以,是否使用聚集索引要全面衡量。c.查询的结果返回某值相同的大量结果集。非聚集索引必须是稠密索引。
#### innodb索引在磁盘上的存储,以及叶子节点上的数据形式 ####
仅做个人笔记
04-02
1303
摘自:
https://juejin.cn/post/6844903856388718606#heading-4
https://my.oschina.net/xiaoyoung/blog/3046779
仅做个人备份,浏览请看原文
目录
聚集索引
知识点
查找:假设要查找数据项6
怎样选择聚集索引
非聚集索引
知识点
查找:获取NAME=Jake的数据
假设我们有一张这样的表,表中有如图2-0的数据
CREATE TABLE `user` (
`ID` bigi..
mysql中聚簇索引和主键索引
weixin_44684303的博客
10-29
1574
索引分为两种:
聚簇索引:也称聚集索引,①一般建表时的主键就会被mysql作为聚簇索引,②如果没有主键,则选择非空唯一的索引作为聚簇索引,③都没有则隐式创建一个索引作为聚簇索引
辅助索引:也称非聚簇索引或二级索引,平时我们添加的索引就是辅助索引
聚簇索引和主键索引
聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。
聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。
查询时用到的所有顺序
主键查询:由于主键被作为聚簇索引
mysql InnoDB 数据存储和查找
大龙的博客
08-06
1029
InnoDB 引擎数据存储
要想了解数据库 InnoDB 引擎是怎么样存储数据的,必须先了解 B+Tree,了解之后才容易理解其存储原理
在 InnoDB 存储引擎中,也有页的概念,默认每个页的大小为 16K,也就是每次读取数据时都是读取 4*4K 的大小。
一般表的主键类型为INT(占用4个字节)或BIGINT(占用8个字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的...
聚簇索引与主键的选择
Azhuzhu_chaste的博客
03-27
2028
聚簇索引与主键的选择一、什么是聚簇索引?二、什么是非聚簇索引?1. InnoDB引擎中2. MyISAM引擎中三、聚簇索引的优劣与主键选择的关系
一、什么是聚簇索引?
首先,聚簇索引不是一种单独的索引类型,其实是数据的存储方式。聚簇索引将数据存储与索引放在了一起,找到了索引也就找到了数据。
在MySql的InnoDB引擎中,表数据的文件是按照B+树组织的一个索引结构。而聚簇索引就是按照每张表的主键...
InnoDB非主键索引结构叶子节点为什么存储的是主键值而不是像MyiSAM索引存储数据地址?
a1_HelloWord的博客
02-16
3440
1.保持一致性,当数据库表进行DML操作时,同一行记录的页地址会发生改变,因非主键索引保存的是主键的值,无需进行更改;
2.节省存储空间,后续补充,不太清楚原因。
参考链接:https://blog.csdn.net/a1_HelloWord/article/details/104341349
...
InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值
茅坤宝骏氹的博客
08-19
7267
转载自 InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值
RT,最近看书关于innodb的
InnoDB是索引组织表,所以完整的数据记录都存在聚集索引的叶子节点上
辅助索引的叶子节点保存的是对应的主键键值,而另外一种存储引擎myisam叶子节点保存的是记录的地址
我的问题是InnoDB 的辅助索引叶子节点为什么不直接保存的记录地址而要存主键键值?(导致在使用辅助索引的查...
mysql innodb 二级索引,mysql InnoDB index 主键采用聚簇索引,二级索引不采用聚簇索引...
weixin_29388659的博客
03-17
96
我的归纳:(1)InnoDB的主键采用聚簇索引存储,使用的是B+Tree作为索引结构,但是叶子节点存储的是索引值和数据本身(注意和MyISAM的不同)。(2)InnoDB的二级索引不使用聚蔟索引,叶子节点存储的是KEY字段加主键值。因此,通过二级索引查询首先查到是主键值,然后InnoDB再根据查到的主键值通过主键索引找到相应的数据块。(3)MyISAM的主键索引和二级索引叶子节点存放的都是列值与行...
mysql 主键索引 慢_MySQL 主键索引比二级索引慢?
weixin_32529429的博客
01-19
464
声明本次测试与提问是为了了解其 原因与原理,非优化与解决问题的方案缓存已经关闭1、MySQL版本5.7.222、第一次数据量约 840 万3、第二次数据量约 100 万4、建表语句CREATE TABLE `user` (`id` INT(11) NOT NULL AUTO_INCREMENT,`girl_name` VARCHAR(20) NULL COMMENT '名称',PRIMARY KE...
主键索引就是聚集索引?MySQL 索引类型大梳理
江南一点雨的专栏
03-24
4465
文章目录1. 按照功能划分2. 按照物理实现划分2.1 聚集索引2.2 非聚集索引3. 小结
之前松哥在前面的文章中介绍 MySQL 的索引时,有小伙伴表示被概念搞晕了,主键索引、非主键索引、聚簇索引、非聚簇索引、二级索引、辅助索引等等,今天咱们就来捋一捋这些概念。
1. 按照功能划分
按照功能来划分,索引主要有四种:
普通索引
唯一性索引
主键索引
全文索引
普通索引就是最最基础的索引,这种索引没有任何的约束作用,它存在的主要意义就是提高查询效率。
普通索引创建方式如下:
CREATE TABLE `
mysql聚簇索引和主键索引的区别
谜底的博客
08-01
598
首先,聚簇索引的含义它并不是数据库索引的某一种类型,而是用来表示数据的一种存储方式。而在innodb中,数据是以B+树的形式进行存储(此处放一个链接来解释B+树),且所有的数据都存储在叶子节点上,非叶子节点只存索引的信息(就是一个key,value是指向叶子结点的指针)。...
InnoDB 是基于聚簇索引建立的
u012402926的专栏
11-17
1567
InnoDB 采用了来支持MVCC高并发,并且实现了四个标准的隔离级别。其默认级别是REPEATABLE READ(可重复读) ,并且,通过间隙锁(next-key locking)策略防止幻读的出现。间隙锁使得InnoDB 不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻影行的插入。
  InnoDB 是基于聚簇索引建立的。InnoDB的索引结构和mysql的其他存储引擎有很大的不同
高性能的Mysql读书笔记系列之五(创建高性能的索引)
jdk_wangtaida的博客
09-21
1356
前言:
正文:
总结:
聚簇索引(聚集索引)
热门推荐
taoqilin的专栏
11-09
1万+
总结:InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分;
  一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。
  我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了找主键索引的二级索引,先找到主键
innodb存储引擎 索引的类型和使用
plumblum的博客
02-19
3242
索引的类型和使用
1.索引的类型及其特点
1.1类型
普通索引
唯一索引
全文索引(FULLTEXT)
mysql叶子结点存储的什么_B+树叶子结点到底存储了什么?
weixin_39907133的博客
01-19
4991
首先MYSQL默认InnoDB引擎,该引擎默认B+树;先说结论:B+树叶子结点存储的是主键KEY或者具体数据。分情况讨论:主键KEY比如说user_name是个索引,当执行该SQL:select * from user_info where `user_name` = 'xiaoming';InnoDB 就会建立 user_name 索引 B+树,节点里存的是 user_name 这个 KEY,...
mysql中的各种索引大总结
风团团
09-12
3695
文章目录为啥不用二叉搜索树?为啥不用平衡二叉(avl)树?为啥不用b-树?为啥用b+树?(重点)索引聚簇索引聚簇索引的缺点
大家都知道mysql索引底层使用的是b+树的数据结构,树有这么多种,那为啥就选择b+树呢?那就从为啥使用b+树开始,到分析其原理的思路一步步分析吧。
为啥不用二叉搜索树?
定义:
1:非空左子树的所有键值小于其根结点的键值。
2:非空右子树的所有键值大于其根结点的键值。
3:左、右子树都是二叉搜索树。就是左节点<根节点<右节点。
看下图树太高了。查询效率太低,故不推荐。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
Helloworld先生
CSDN认证博客专家
CSDN认证企业博客
码龄10年
暂无认证
43
原创
4万+
周排名
158万+
总排名
35万+
访问
等级
2815
积分
53
粉丝
244
获赞
92
评论
692
收藏
私信
关注
热门文章
ThreadPoolExecutor中的keepAliveTime详解
41745
rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
40936
HashMap:为什么容量总是为2的次幂
28728
Mysql锁详解(行锁、表锁、意向锁、Gap锁、插入意向锁)
24734
Mybatis:了解SqlSessionTemplate
21956
分类专栏
maven
1篇
spring
2篇
python
1篇
java
20篇
tomcat
3篇
http
1篇
json
jvm
3篇
netty
1篇
idea
1篇
docker
2篇
redis
2篇
hash
1篇
算法
3篇
mysql
6篇
索引
1篇
事务
2篇
计算机基础
2篇
linux
1篇
mybatis
3篇
thread
3篇
shell
1篇
协程
1篇
并发
2篇
go
最新评论
Mysql的Gap锁(间隙锁)详解
若剑:
http://t.csdn.cn/m9won欢迎看看我的验证
Mysql的Gap锁(间隙锁)详解
若剑:
跟主键有关,主键id在3-7之间
学习Mysql的join算法:Index Nested-Loop Join和Block Nested-Loop Join
Wyatt Yiu:
写得很好,对这块清晰多了。但是这里有点疑问,index为什么是乘高度?一层不也有多个索引节点吗?
HashMap:为什么容量总是为2的次幂
weixin_42971603:
我想是因为是如果不是2^n-1,那么肯定有0,与运算&0的结果都是0,冲突概率更大,没有利用好长度
Mysql的Gap锁(间隙锁)详解
菜菜的大数据开发之路:
博主,你不要以为自己有几分shuaqi就了不起,你这种男孩子,我见一个赞一个。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
redis:通过CLion打开redis的源码并启动服务,进行源码调试
Python中os.fork()的简单理解
MacOS10.14,python安装Mysql-python出错,报ld: library not found for -lssl
2019年21篇
2018年3篇
2017年9篇
2016年12篇
2015年3篇
目录
目录
分类专栏
maven
1篇
spring
2篇
python
1篇
java
20篇
tomcat
3篇
http
1篇
json
jvm
3篇
netty
1篇
idea
1篇
docker
2篇
redis
2篇
hash
1篇
算法
3篇
mysql
6篇
索引
1篇
事务
2篇
计算机基础
2篇
linux
1篇
mybatis
3篇
thread
3篇
shell
1篇
协程
1篇
并发
2篇
go
目录
评论 1
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值