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
评论