zoukankan      html  css  js  c++  java
  • mysql 索引优化 Explain的使用

    索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本

    MySQL提供了Explain,用于显示SQL执行的详细信息,可以进行索引的优化。

    一,导致SQL语句执行慢的原因

    1.硬件问题。如: 网络速度,内存不足,I/O吞吐量小,磁盘空间满了等。

    2.没有索引 或者 索引失效。(表中某些数据被硬删除,会影响到索引,需要重建索引)

    3.数据过多

    4.服务器参数小,(重新设置my.cnf 表参数)

    注意:  索引失效的情况有---> 条件中有 or ,like查询以 开头。

     强制索引 force index(idx_order_levelDate) 

    explain select * from itdragon_order_list force index(idx_order_levelDate) order by order_level,input_date;

    索引的创建

    ALTER TABLE `table_name` ADD INDEX `index_name` (`column_list`) -- 索引名,可要可不要;如果不要,当前的索引名就是该字段名。 
    ALTER TABLE `table_name` ADD UNIQUE (`column_list`) 
    ALTER TABLE `table_name` ADD PRIMARY KEY (`column_list`) 
    ALTER TABLE `table_name` ADD FULLTEXT KEY (`column_list`)

    二,分析原因,找到切入点

    1. 先观察, 开启慢查询日志,设置相应的阈值,在生产环境跑一天,(超过3s就是慢sql)

    2.Explain和慢SQL分析; 如: SQL语句烂,索引没有或失效。关联查询过多等等。

    3.Show Profile 是比 Explain更细节点

    4.mysql 服务器参数调优,

    三, Explain 分析

    索引使用情况在  possible_keys、key和key_len三列 。

    id  值越大越先被执行

    table 查询涉及的表或者衍生表

    select_type :

    • SIMPLE: 表示此查询不包含 UNION 查询或子查询
    • PRIMARY: 表示此查询是最外层的查询
    • SUBQUERY: 子查询中的第一个 SELECT
    • UNION: 表示此查询是 UNION 的第二或随后的查询
    • DEPENDENT UNION: UNION 中的第二个或后面的查询语句, 取决于外面的查询
    • UNION RESULT, UNION 的结果
    • DEPENDENT SUBQUERY: 子查询中的第一个 SELECT, 取决于外面的查询. 即子查询依赖于外层查询的结果.
    • DERIVED:衍生,表示导出表的SELECT(FROM子句的子查询)

    type:

      system: 表中只有一条数据, 这个类型是特殊的 const 类型。
      const: 针对主键或唯一索引查询,只返回一条数据。速度非常快
      eq_ref: 多表的 join 查询,效率比较高,两边表的数据量一样,一条对应一条。
      ref: 多表的 join 查询,针对于非唯一或非主键索引,
      range: 表示使用索引范围查询
      index: 表示全索引扫描
      ALL: 表示全表扫描,这个类型的查询是性能最差的查询之一。

      性能关系:  ALL < index < range ~ index_merge < ref < eq_ref < const < system

    possible_keys   mysql 在查询时,可能使用到的索引

    key    mysql 在查询时 , 真正使用到的索引

    key_len 查询优化器使用了索引的字节数

    ref  索引的哪个列被使用了

    rows   查询结果需要扫描读取的数据行数  (越小越好)

    优化:

    explain  查询后,查看SQL语句的type类型 , 索引是否使用。 

  • 相关阅读:
    忘记密码破解
    关于本地变量的理解
    MVC的请求过程(或者MVC三者的关系)
    static 静态 关键字
    博客搬家通知
    C#一个可以马上跑起来的反射例子Assembly的使用
    C#之DateTime日期格式解析
    AddressParsing在C#中好用的地址拆分地址结构化库Net5
    C#中获取本地IP地址方法
    ComdeDom生成对象Emit之引用其他成员类库
  • 原文地址:https://www.cnblogs.com/ajk4/p/12915261.html
Copyright © 2011-2022 走看看