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

发布于: 17 小时前

来源: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)-查询优化