写点什么

MySQL:从 B 树到 B+ 树到索引再到存储引擎

  • 2022 年 4 月 16 日
  • 本文字数:960 字

    阅读完需:约 3 分钟


innodb 辅助索引,其中叶子存放的是主键

MyIsam 存储引擎

很显然,MyIsam 不可能再会用聚集索引了,虽然他用的是 B+树,但是他的主键索引和辅助索引没有任何区别,都是在叶子中存储数据行的物理地址,这也使得他的读性能更高,我们来 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源 看他的模型吧:



MyIsam 存储引擎的主键索引


![](https://img-blog.csdnimg.cn/img_convert/b31071ba599ae34f Java 开源项目【ali1024.coding.net/public/P7/Java/git】 c3612bfa36849513.png)


MyIsam 存储引擎的辅助索引,存放的同样是物理地址


区别


--


1、innodb 支持事务,且默认是 Autocommit,所以每一条 SQL 语句都会封装成一个事务,如果执行多条事务,最好加上 begin 和 commit。MyIsam 不支持事务,也就无法回滚;


2、另外 Innodb 支持行锁,MyIsam 进行写操作会全表上锁,所以 MyIsam 的写操作性能会差些;


3、所以,在查询较多的表中,使用 MyIsam 较优,写比较多的表,使用 Innodb;


拓展--复合索引




我们都知道我们可以对一个列创建一个索引,但是什么是复合索引呢?


创建:


create?table?test(


a?int,


b?int,


c?int,


KEY?a(a,b,c)


);


通过以上代码我们就可以创建一个 a、b、c 三个字段的复合索引了,相对于维护三个索引,维护一个复合索引的开销肯定是更低的。


但是复合索引需要满足一个最左匹配原则,也就是他会依次查找 a、b、c 三个字段,当左边的字段未作为判断条件时,就不会再去执行接下来的索引了,测试如下:


EXPLAIN?DELETE?from?test


where??a=1?and?c=?3?and?b?=2?



当 a、b、c 都有的时候,他会继续去匹配右边的字段


EXPLAIN?DELETE?from?test


where??a=1?and?c=?3?



当去除 b 时,发现复合索引只匹配到 a 就结束了,并不会匹配 c


推荐文章


  • [14 个项目!](()

  • [一款小清新的 SpringBoot+ Mybatis 前后端分离后台管理系统项目](()

  • [47K Star 的 SpringBoot+MyBatis+docker 电商项目,附带超详细的文档!](()

  • [写博客能月入 10K?](()

  • [一款基于 Spring Boot 的现代化社区(论坛/问答/社交网络/博客)](()


更多项目源码


  • [这或许是最美的 Vue+Element 开源后台管理 UI](()

Java 高频面试专题合集解析:


当然在这还有更多整理总结的 Java 进阶学习笔记和面试题未展示,其中囊括了 Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构资料和完整的 Java 架构学习进阶导图!



更多 Java 架构进阶资料展示





用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
MySQL:从B树到B+树到索引再到存储引擎_Java_爱好编程进阶_InfoQ写作平台