学习Java第五十九天——MySQL篇
文章目录
- 如何定位慢查询?
- sql执行计划
- 什么是索引:
- 什么是聚集索引,什么是二级索引:
- 覆盖索引:
- 索引创建的原则:
- 索引失效情况:
- sql优化经验:
- 并发事务:
- undo log和redo log
- MVCC:
- 主从同步原理:
- 分库分表:

如何定位慢查询?

假如你的业务就是接口比较慢,那你怎么能够确定是sql的问题呢?就算是sql的问题,你怎么能够找出这个执行慢的sql呢?


sql执行计划
如果说你现在定位到了慢sql之后,那如何分析这个sql做进一步的优化(分析)呢?



什么是索引:

为什么用B+树:
因为红黑树啊它也是一个二叉树,每个节点只能有两个子节点。假如mysql中某一张表的数据量是比较大的,那这样的话就会使这个红黑树啊变得特别的高,如果你查找数据的话,仍然需要找很多的层级,才能找到想要的数据,所有红黑树的效率也不高。

B树:多叉路的平衡查找树

与B树相比,B+树不同的点在于非叶子节点它只存储指针,不存储数据,它们主要的作用就是导航找到下面的叶子节点来去获取数据。只有叶子节点上才会真正的存储数据。

Bym解释:
①:扫描导航指针时不需要读出对应的数据(B树顺带就读出来了),它压根也没存。
②:找到底层叶子节点才有数据。
③:叶子节点之间有双向指针,范围查询时不需要重新从根节点再找一次。

什么是聚集索引,什么是二级索引:

下图更清晰:

回表查询:简单说就是先通过二级索引去找到对应的主键值,然后拿到主键再到聚集索引中去找到整行的数据,这个过程其实就是回表查询。

覆盖索引:


超大分页问题:
limit不用order by也要排序?弹幕:limit操作前需要先进行排序,这里有两种优化方法可以去看最新版的mysql8的视频

使用覆盖索引解决超大分页问题:

索引创建的原则:

索引失效情况:

命中索引:

索引失效,情况1:

情况2:

情况3:

情况4:类型转换造成索引失效

情况5:模糊查询有可能导致索引失效
弹幕:索引排序是按照前缀值排序的

Bym总结:只要出现索引字段(每个字符或者类型)不完全匹配或者不按照顺序索引,都会失效
弹幕:这个就是要用es的原因
sql优化经验:



并发事务:




undo log和redo log
undo log和redo log都属于mysql日志文件,但是它们的功能不一样。

MVCC:










主从同步原理:
一个java应用,首先要去连接数据库的中间件,然后中间件里边至少连接了两个库,一个是主库,一个是从库。主库负责写数据,从库负责读数据,当主库写数据的时候,就要把数据同步到从库中,他们是如何进行同步的呢?同步的原理又是什么呢?


分库分表:






需要使用中间件解决


