如何处理SQL语句表结构的性能瓶颈(组图)
优采云 发布时间: 2021-08-11 00:14
如何处理SQL语句表结构的性能瓶颈(组图)
1. EXPLAIN 介绍
使用EXPLAIN关键字模拟优化器执行SQL查询语句,从而了解MySQL如何处理你的SQL语句。分析查询或表结构的性能瓶颈。
➤ 通过 EXPLAIN,我们可以分析以下结果:
➤ 用法如下:
EXPLAIN +SQL 语句
EXPLAIN SELECT * FROM t1
执行计划中收录的信息
2.执行计划中各个字段的含义2.1 id
select查询的序号,包括一组数字,表示查询中select子句或操作表的执行顺序
id的结果有3种情况
2.2 select_type
常用和常用值如下:
用于表示查询的类型,主要用于区分普通查询、联合查询、子查询等复杂查询。
2.3 表
引用当前正在执行的表
2.4 类型
Type 显示查询中使用的是哪种类型,type 中收录的类型包括如下图所示的几种:
从最好到最坏:
system > const > eq_ref > ref > range > index > all
一般来说,要保证查询至少达到range级别,最好是ref。
2.5 possible_keys 和 key
possible_keys 显示一个或多个可应用于该表的索引。如果查询涉及的字段上有索引,则会列出该索引,但查询可能不会实际使用该索引。
键
2.6 key_len
表示索引中使用的字节数。此列可用于计算查询中使用的索引的长度。长度越短,在不损失精度的情况下越好。 key_len显示的值是索引字段的最大可能长度,不是实际使用的长度,即key_len是根据表定义计算的,不是从表中检索出来的。
2.7 参考
显示使用索引的列,如果可能,最好是常量。哪些列或常量用于查找索引列上的值。
2.8 行
根据表统计和索引选择,粗略估计找到需要的记录需要读取的行数,也就是用的越少越好
2.9 额外
在其他列中收录不适合明确但重要的信息的附加信息
2.9.1 使用文件排序(九死一生)
表示mysql会使用外部索引对数据进行排序,而不是按照表中的索引顺序读取。在 MySQL 中使用索引无法完成的排序操作称为“文件排序”。
2.9.2 使用临时(十死不生)
使用临时表保存中间结果,MySQL在对查询结果进行排序时使用临时表。常用于排序 order by 和分组查询 group by。
2.9.3 使用索引(发了财)
表示在对应的select操作中使用覆盖索引(Covering Index),避免访问表的数据行,效率好。如果 using where 同时出现,则表示该索引用于进行索引键查找;如果使用 where 没有同时出现,则表示该索引用于读取数据,而不是执行查找。
2.9.4 使用地点
表示使用过滤的地方
2.9.5 使用连接缓冲区
表示使用了连接缓存。比如查询的时候,多表join的次数非常多,所以在配置文件中增加buffer的join buffer。
2.9.6 不可能在哪里
where 子句的值始终为 false,不能用于获取任何元组
SELECT * FROM t_user WHERE id = '1' and id = '2'
2.9.7 选择优化掉的表
在没有GROUPBY子句的情况下,根据索引优化MIN/MAX操作或者针对MyISAM存储引擎优化COUNT(*)操作。您无需等到执行阶段才能执行计算。优化查询执行计划生成阶段。
2.9.8 不同
优化distinct操作,找到第一个匹配的元组后停止寻找相同值的动作
3. 案例研究
推荐学习:mysql教程
以上是MySQL中explain使用和结果分析(详解)的详细内容。更多详情请关注php中文网其他相关文章!
免责声明:本文转载于:csdn,如有侵权,请联系删除