MySQL:从 B 树到 B+ 树到索引再到存储引擎
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 架构进阶资料展示
评论