写点什么

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: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 17     filtered: 100.00        Extra: Using filesort1 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)-查询优化