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类型 , 索引是否使用。 

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/ajk4/p/12915261.html
Copyright © 2011-2022 走看看