MySQL 实战 45 讲笔记(2)- 查询优化

用户头像
王传义
关注
发布于: 2020 年 06 月 28 日

来源:MySQL 实战 45 讲笔记 侵删

章节



12 为什么我的MySQL会“抖”一下?

14 count 这么慢,我该怎么办?

16 “order by”是怎么工作的?

19 为什么我只查一行的语句,也执行这么慢?



12 为什么我的MySQL会“抖”一下?



14 count 这么慢,我该怎么办?

  • 没有存储count数量



  • 多少行还不确定吗?

因为即使是在同一个时刻的多个查询,由于多版本并发控制(MVCC)的原因,

InnoDB 表“应该返回多少行”也是不确定的



  • 如何优化?普通索

普通索引树比主键索引树小很多。

对于 count(*) 这样的操作,遍历

哪个索引树得到的结果逻辑上都是一样的。

因此,MySQL 优化器会找到最小的那棵树来遍历



  • 为什么这样做?

画外音:

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







辅助阅读:

  1. 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

mysql> explain select id_card,name,age from user order by age limit 3 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: user
partitions: NULL
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 17
filtered: 100.00
Extra: Using filesort
1 row in set, 1 warning (0.01 sec)



相关阅读:

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



用户头像

王传义

关注

希望每一位来访的朋友都能有所收获! 2017.11.30 加入

如果有疑问 wang_cyi@163.com 联系

评论

发布
暂无评论
MySQL 实战 45 讲笔记(2)-查询优化