zoukankan      html  css  js  c++  java
  • 7.使用EXPLAIN 来分析SQL和表结构_2

    possible_keys    ------   显示可能应用在这张表的索引,一个或多个

              查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被实际查询使用

    key   ------   实际使用的索引。如果为NULL,则没有使用索引

         查询中若使用了 覆盖索引,则该索引和查询的select字段重叠  

           select 字段可以是索引的一部分,即索引中的字段可以将要查询的字段覆盖(是select后面的字段,不是where后面的字段)

    key_len   ------   表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精度的情况下,长度越短遇到越好

              key_len 显示的值为索引字段的最大可能长度,并非实际使用长度,

           即key_len是根据定义计算而得,不是通过表内检索出的

    rows   ------   根据表统计信息及索引选用情况,大致估算出找到所需的记录需要读取的行数

    Extra   ------   包含不适合在其他列中显示但十分重要的额外信息

      1.Using filesort  说明mysql会对数据使用一个外部的索引序列,而不是按照表内的索引顺序进行读取

      MySQL无法利用索引完成的排序操作称为 ‘文件排序’,(需要避免)

      2.Using temporary  使用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by

        一般使用排序order by和 分组查询 group by 这种需要使用到索引排序的功能的时候,

        要按照创建索引时的个数和顺序来,否则很容易产生文件内排序 和 临时表 ,影响性能

        为什么要按照这个索引的个数和顺序来:一个索引,创建一棵树,如果是联合索引,第二列会放在第一列后面

        第二列也做了排序,首先根据第一列排序的结果,在第一列一样的情况下,第二列再排序

        如:A = 22  AND B = 33

        你假设一下 C = A*1000 + B,然后根据C做BTREE,以A先放,A相同的情况下按B的顺序放

        存的时候 A 先 存,确定了A的位置之后,再存B;;查的时候,也要先有A,有了A的准确位置,才能拿到B

      

      Using index   ------   表示相应的select 操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错

                 如果同时出现using where ,表明索引被用来执行索引键值的查找

                 如果没有同时出现 using where,表明索引用来读取数据而非执行查找动作

      Using where   ------   表明使用了 where 过滤

      Using join buffer   ------   使用了连接缓存

      impossible where   ------   where 子句的值总是 false,不能用来获取任何元祖

      select tables optimized away   ------  

      distinct   ------   优化 distinct 操作,在找到第一行匹配的元组后即停止找同样值的动作

        

  • 相关阅读:
    Linux 性能优化--理解 CPU 使用率和平均负载
    sqlalchemy ORM
    redis缓存数据库
    基于CentOS安装FTP服务器
    python3之platform模块
    paramiko模块
    shelve模块
    Vue入门---属性、style和class绑定方法
    Vue入门---事件与方法详解
    Vue入门---常用指令详解
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7366342.html
Copyright © 2011-2022 走看看