动画演示:用最简单直白的方式讲解MySQL的主键索引、普通索引和联合索引

作者: 码上加薪分类: 计算机技术 发布时间: 2023-08-28 19:48:15 浏览:16000 次

动画演示:用最简单直白的方式讲解MySQL的主键索引、普通索引和联合索引

比特咖啡:
我想问一下如果不建立任何索引,就直接全表扫描吗?

【回复】不建立索引也会提供一个默认的主键的聚簇索引吧,如果你查询主键是可以用到索引的。
【回复】很多时候即使建了索引也不会用,比如不符合使用索引的有关规范(不满足最左前缀),使用函数或者自动类型转换等,很多时候都是由查询优化器决定的即使你满足某些条件也不一定会用索引。
【回复】不建立索引就是全表扫描
码上加薪:
计划在9月初,开启新一轮的送书活动,具体日期我再单独通知。鉴于上次送书的经验和教训,这次赠送的图书都是Java系列的。

香蕉皮蛋粥:
UP讲的还是挺用心的,重点和原理都说到了,做PPT很费时间的,辛苦了;想深入学习的小伙伴推荐几本书《MySQL是怎样运行的:从根儿上理解MySQL》、《MySQL技术内幕:innodb存储引擎》、《高性能MySQL》这三本书,个人感觉非常不错;《MySQL运维内参》也非常棒!!!

小宇20211:
请问索引的非叶子节点是不是常驻内存中的?

【回复】索引和数据一样都是在磁盘上存着的
CinoCinelli:
b+数只有叶子节点有双向链表链接吧,非叶子节点互不链接吧

【回复】查了下资料,B+树叶子节点确实不会双向链表连接
8岐大猹:
联合索引最后的案例,name = 'K' and age = 96。二层分支目录中有最小值73的页和最小值88的页,这时候innodb怎么执行呢?按理说88最接近96啊

【回复】name是中文,是怎么排序?
【回复】这主要是联合索引“最左匹配”的原因吧,先按照name排序,name相同再按age排序,所以找到的是最小值是73的页?
【回复】回复 @码上加薪 :忘了name列 感谢提醒
乐扣乐扣哦哦哦:
mysql中innodb引擎,建立a的单列索引和建立(a,b)的联合索引,这两个索引树的深度和宽度是怎么变化

毛头小子233:
听up语气讲编程,怎么感觉像是在听百家讲坛哈哈哈

看我的biu:
普通索引的目录页(非叶子节点)为什么要存最小主键值呢?按道理排序已经不需要按照主键值了,只是叶子节点存放主键值就够了,非叶子节点去掉最小主键值能省一些空间吧?

【回复】回复 @看我的biu : 好像是这么可以理解哈[脱单doge]
【回复】当目录页的件的值相同的情况,就会按照主键大小去排序,并且普通索引的目录页没行的数据如果有主键值,当查询的数据从目录页就能查询到的话,直接拿主键去回表查数据就行了,不需要去叶子结点查了
【回复】回复 @Mi_ManChi灬 :也就说普通索引值相同时,主键就会成为排序依据,从而弥补普通索引因其非唯一性(Unique)所产生的索引值相同值情况这一缺点.这样说对吗?因为主键必定具有唯一性,而普通列生成的普通索引不一定具有唯一性.
看我的biu:
想问一下,二级索引(普通索引)的所有页(包括目录页和数据页)都不支持槽结构吧?因为槽是把小组数据的最大主键值拿出来作为标记,但普通索引的排序是根据非主键来排序的,所以,我可不可以认为,槽这个结构只存在于主键索引里?

【回复】回复 @看我的biu :你可以看哪个深入理解mysql,我也是看的那个
【回复】页目录槽记录的是每组最大记录的地址偏移量,有了地址偏移量,就可以找到这行的全部记录(二级索引列的数据)了

联合索引 聚簇索引 MySQL 普通索引

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!