如何处理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,如有侵权,请联系删除

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线