zoukankan      html  css  js  c++  java
  • mysql重点--执行计划

     explain SQL;

    在sql语句前面加explain实现“执行计划”的功能。功能是比较准确的显示将要执行这条sql语句的运行状况。

    select_simple 是查询类型;table 表名字 possible_keys,key 有可能,真实走的那一列索引 rows 涉及多少条数据 

    在上述的图片中,有几个需要注意的地方。

    type 

    查询时的访问方式,性能:all < index < range < index_merge < ref_or_null < ref < eq_ref < system/const

      #ALL --表示全数据表查询

       #INDEX --表示全数据表查询

      以上两种都是有优化的余地的。从语句到表结构到缓存上。

      #range 优于前两者

      

      在使用范围查找的时候(< , > ,= ,>=,<=,!=),若是对索引进行查找会是range类型。否则还是全表扫描。

      特别的,!= 和 > 特殊的在此版本的mysql中不为命中索引。但是这也都是不一定的比如:

       explain select nid from bigdata where name !="dfhwe32423k3jbf2uh54hk5jb34";  --index

       explain select nid from bigdata where name !="zefs";  -- range    nid是纯数字并且主键。name是长字符串普通索引。

      同样的两条语句会因为查找的条件不同而改变查找类型。同理,当查找目标select后是主键或者数字时又会有所不同。

        so,实践是检验真理的唯一标准。

      #index_merge

        即索引合并,注意OR  explain select name from bigdata where name ="dfhwe4" or nid = 3434  

      #ref

        即普通索引,根据索引查找一个或多个值 select * from tb1 where name = 'seven';

      #qe_ref

        同上,只不过用到了主键或者unique。

      #const

        表最多有一个匹配行,因为仅有一行,在这行的列值可被优化器剩余部分认为是常数,const表很快,因为它们只读取一次。

         select nid from tb1 where nid = 2 ;

      #system

        表仅有一行(=系统表)。这是const联接类型的一个特例。 select * from (select nid from tb1 where nid = 1) as A;

    慢日志查询

    slow_query_log = OFF                            是否开启慢日志记录
    long_query_time = 2                              时间限制,超过此时间,则记录
    slow_query_log_file = /usr/slow.log        日志文件
    log_queries_not_using_indexes = OFF     为使用索引的搜索是否记录

    以上可以写在配置文件ini文件中,也可以在终端上暂时写进内存中下次重启在永久执行。

      

  • 相关阅读:
    Centos 6.4 8250/16550 只生成了4个串口
    Warning: Data truncated for column 'AirPress' at row 1
    I.MX6 32G SD卡测试
    oracle创建数据库表空间
    oracle创建表空间
    SpringMvc文件下载
    怎么取消ie浏览器body与html的间隙
    Ztree手风琴效果(第三版)
    判断JS对象是否拥有某属性
    js代码判断浏览器种类IE、FF、Opera、Safari、chrome及版本
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/6004223.html
Copyright © 2011-2022 走看看