zoukankan      html  css  js  c++  java
  • 数据库调优教程(四)Explain性能分析命令

    上一章我们将了如何发现慢查询并把语句记录到日志中,那么在发现慢查询后,要怎样才能知道语句的问题发生在哪里。本章将介绍怎样使用Mysql提供的数据库性能分析命令,对sql语句进行分析。


    二、数据库性能分析Explain命令


    Explain的作用是生成一个QEP(查询执行计划),可以帮助我们在不真正执行某个sql语句时,就看到mysql怎样执行,这样方便我们去分析sql指令的好坏。

    执行如下语句

    Explain select * from emp where empno = 3333G

    对于返回的信息,我们主要关心一下几个

    1)    Type

    ALL全表扫描,通常是不好的,其他的如index、range、const、ref、system则是较好的

    2)    Possible_keys

           可能被用到的索引

    3)    Key

           查询过程中实际使用的索引,当为null时表示没有使用索引,通常是不好的

    4)    key_len

    索引字段最大可能使用的长度,也叫索引基数。索引基数越大,表明可能查找的行数越多,查询效率越慢。

    5)    Rows

    MySQL 估计的需要扫描的行数。只是一个估计。越多表明查找的行数越多,自然越慢。

    6)    Extra

    显示上述信息之外的其它信息,非常重要。其主要有一下返回结果。

           Usingindex

    表明此查询使用了覆盖索引(CoveringIndex),即通过索引就能返回结果,无需访问表。(覆盖索引是一种非常优秀的索引,其使用见http://blog.csdn.net/hzy38324/article/details/44857721

    若没显示"Usingindex"表示读取了表数据。

           Usingindex condition

    可能会使用索引

           Usingwhere

    表示 MySQL 服务器先读取整行数据,再检查此行是否符合 where 句的条件,符合就留下,不符合便丢弃。效率较慢。

           Usingfilesort

    表示Mysql会按查询所需的顺序对结果进行排序,这时就会出现 Usingfilesort 。排序自然会增加查询时间,导致效率变慢。解决方法是利用索引进行排序。若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,此时就不会出现Using filesort。

           关于“Using index” 和 “Using index condition”的区别,笔者参考了一下stackoverflow上的一篇文章

    http://stackoverflow.com/questions/1687548/mysql-explain-using-index-vs-using-index-condition

    里面是这么解释的


    简单的说

    Using index就是一定使用索引,这种索引成为覆盖索引,Using index condition则是在必要的时候才使用索引

    怎样才能让Usingindex condition变成Using index,答案自然是创建一个覆盖索引,同样,笔者将会在之后章节介绍覆盖索引如何创建。


    本章结束,下一章我们将全面讲解性能优化的利器——索引。



  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/javdroider/p/5184315.html
Copyright © 2011-2022 走看看