zoukankan      html  css  js  c++  java
  • 转载:MySQL EXPLAIN 命令详解学习

    转载自:https://blog.csdn.net/mchdba/article/details/9190771

    MySQL EXPLAIN 命令详解

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行
    SQL 语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。

    1 语法
    MySQL 的EXPLAIN 语法可以运行在SELECT 语句或者特定表上。如果作用在表上,那么此命令等同于DESC 表命令。UPDATE
    和DELETE 命令也需要进行性能改进,当这些命令不是直接在表的主码上运行时,为了确保最优化的索引使用率,需要把它们改
    写成SELECT 语句(以便对它们执行EXPLAIN 命令)。请看下面的示例:

    1 UPDATE table1
    2 SET col1 = X, col2 = Y
    3 WHERE id1 = 9
    4 AND dt >= '2010-01-01';

    这个UPDATE语句可以被重写成为下面这样的SELECT语句:

    1 SELECT col1, col2
    2 FROM table1
    3 WHERE id1 = 9
    4 AND dt >= '2010-01-01';

    在5.6.10版本里面,是可以直接对dml语句进行explain分析操作的.

    MySQL 优化器是基于开销来工作的,它并不提供任何的QEP的位置。这意味着QEP 是在每条SQL 语句执行的时候动态地计
    算出来的。在MySQL 存储过程中的SQL 语句也是在每次执行时计算QEP 的。存储过程缓存仅仅解析查询树。

    2 各列详解
    MySQL EXPLAIN命令能够为SQL语句中的每个表生成以下信息:

     1 mysql> EXPLAIN SELECT * FROM inventory WHERE item_id = 16102176G;
     2   ********************* 1. row ***********************
     3   id: 1
     4   select_type: SIMPLE
     5   table: inventory
     6   type: ALL
     7   possible_keys: NULL
     8   key: NULL
     9   key_len: NULL
    10   ref: NULL
    11   rows: 787338
    12   Extra: Using where

    这个QEP 显示没有使用任何索引(也就是全表扫描)并且处理了大量的行来满足查询。对同样一条SELECT 语句,一个优化过的QEP 如下所示:

     1 ********************* 1. row ***********************
     2   id: 1
     3   select_type: SIMPLE
     4   table: inventory
     5   type: ref
     6   possible_keys: item_id
     7   key: item_id
     8   key_len: 4
     9   ref: const
    10   rows: 1
    11   Extra:

    在这个QEP 中,我们看到使用了一个索引,且估计只有一行数据将被获取。

    -----------------------------------------------------------我写的:

    从上边的例子大概能看出来执行结果每一项的含义,所以我暂时没有把每一项的解析copy过来。

    比如加了一个索引,但是索引失效导致全表查的情况也不少,为了验证和优化索引,可以用explain命令,查看索引的使用情况,帮助优化。

  • 相关阅读:
    Protobuf
    CPU profiling
    转 Unicode 和 UTF-8 的区别
    Redis数据结构底层知识总结
    MySQL 加锁处理分析 ---非常牛逼
    MySQL Gap Lock问题
    利用Linux文件系统内存cache来提高性能
    Xcode7安装CocoaPods
    字符串排列组合算法
    iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
  • 原文地址:https://www.cnblogs.com/mySummer/p/10687380.html
Copyright © 2011-2022 走看看