MySQL的explain

在日常的开发中会遇到某些SQL执行特别慢。这种SQL会导致系统由于同步查询反馈缓慢影响用户体验。所以必须对这些SQL采取一定的措施进行优化,比如加联合索引,索引覆盖等措施。

1.发现执行效率差的SQL

在开发场景,一般开发者手里只有测试数据,如果不进行专业的压力测试,很容易疏忽SQL因为数据量导致执行缓慢。在生产上,仅仅通过测试定位问题不够精准,问题的可预见性也不强。MySQL提供了一个慢查询记录的功能,其实就是自动记录一些超过配置文件约定时间的SQL查询语句。这个慢查询因为只会记录超时SQL因此对数据库系统的影响较小。
my.conf配置代码

long_query_time = 10 # 执行超过10s的SQL会被记录
log-slow-queries = /var/lib/mysql/mysql-slow.log # 超时SQL日志所在位置

2.分析执行效率差查询的SQL

在Mysql数据库中定位出执行慢的SQL,就得开始分析为什么执行的慢,不能盲目的建索引。建索引固然能提高效率,但是最好是在读多写少的表中,如果是读少写多的表,维护索引对系统的性能也是不菲的损耗。
explain可以看到一条SQL的执行计划,确定该SQL是否用到了索引,是否进行全表扫描。试用效果如图。
image
可见explain的执行结果为一个表的形式进行展示

字段 含义
id 一条SQL会有多个select过程,id为查询的序号
select_type 查询类型,每个SELECT子句类型,比如SIMPLE,UNION
table 访问数据库中表的名称
partitions 找到表中所需行的方式,比如ALL、INDEX
possible_keys 查询涉及的字段存在的索引被列出
key 确定使用的索引
key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
ref 哪些列或常量被用于查找索引列上的值
rows 估算结果的行数
filtered 多少比例数据行数通过了过滤,图中为100%
posted @ 2021-10-15 23:04  月落随山隐  阅读(36)  评论(0)    收藏  举报