MySQL 实战 45 讲笔记(2)- 查询优化
来源:MySQL 实战 45 讲笔记 侵删
章节
12 为什么我的MySQL会“抖”一下?
14 count 这么慢,我该怎么办?
16 “order by”是怎么工作的?
19 为什么我只查一行的语句,也执行这么慢?
12 为什么我的MySQL会“抖”一下?

14 count 这么慢,我该怎么办?
没有存储count数量

多少行还不确定吗?
因为即使是在同一个时刻的多个查询,由于多版本并发控制(MVCC)的原因,
InnoDB 表“应该返回多少行”也是不确定的

如何优化?普通索
普通索引树比主键索引树小很多。
对于 count(*) 这样的操作,遍历
哪个索引树得到的结果逻辑上都是一样的。
因此,MySQL 优化器会找到最小的那棵树来遍历
为什么这样做?

画外音:
多线程环境下,程序很难做到一直,需要事务来解决这个问题



辅助阅读:
InnoDB is a multi-versioned storage engine: it keeps information about old versions of changed rows, to support transactional features such as concurrency and rollback.
https://dev.mysql.com/doc/refman/5.7/en/innodb-multi-versioning.html
16 “order by”是怎么工作的?
一个order by语句是如何执行的?

内部还排序?

这个为啥有没排序

什么是 Using temporary; Using filesort
默认 sortbuffersize 为 256KB
相关阅读:
https://juejin.im/post/5bd8faf16fb9a05ce172a228
https://juejin.im/post/5ea9972f6fb9a04382227db5
https://www.cnblogs.com/kramer/p/6703750.html
对city-name 建立索引,对重复字典设置索引

19 为什么我只查一行的语句,也执行这么慢?
在我理解中,查询跟锁是没关系的?怎么会遇到锁呢


Waiting for table flush
The thread is executing FLUSH TABLES and is waiting for all threads to close their tables,

相关阅读:https://www.cnblogs.com/kerrycode/p/7388968.html
等行锁

limit =1

评论