MySQL中EXPLAIN语句怎么使用

蜗牛 互联网技术资讯 2022-05-20 170 0

这篇文章主要介绍了MySQL中EXPLAIN语句怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL中EXPLAIN语句怎么使用文章都会有所收获,下面我们一起来看看吧。

    前言

    在MySQL中 DESCRIBE 和 EXPLAIN 语句是相同的意思。DESCRIBE 语句多用于获取表结构,而 EXPLAIN 语句用于获取查询执行计划(用于解释MySQL如何执行查询语句)。

    通过 EXPLAIN 语句可以帮助我们发现表格的哪些字段上需要建立索引,用于加速查询。也可以使用 EXPLAIN 检查优化器是否使用最优的顺序来连接表。

    EXPLAIN 语法如下:

    {EXPLAIN | DESCRIBE | DESC}
        tbl_name [col_name | wild]
    
    {EXPLAIN | DESCRIBE | DESC}
        [explain_type]
        {explainable_stmt | FOR CONNECTION connection_id}
    
    {EXPLAIN | DESCRIBE | DESC} ANALYZE [FORMAT = TREE] select_statement
    
    explain_type: {
        FORMAT = format_name
    }
    
    format_name: {
        TRADITIONAL
      | JSON
      | TREE
    }
    
    explainable_stmt: {
        SELECT statement
      | TABLE statement
      | DELETE statement
      | INSERT statement
      | REPLACE statement
      | UPDATE statement
    }

    1、获取表结构

    DESCRIBE 是 SHOW COLUMNS 的快捷方式,也可以用于显示View 的信息,SHOW COLUMNS提供了更多的列信息。

    SHOW CREATE TABLE, SHOW TABLE STATUS, SHOW INDEX 也用于提供表信息。

    DESCRIBE 默认显示所有列的信息,如果指定了 col_name 将只显示该列的信息。wild 用于指定模式串,可以使用SQL通配符 % 和 _。如果指定了 wild ,将显示与模式串匹配的列信息。如果没有特殊字符(空格或其它特殊字符),模式串不需要使用引号括起来。

    DESCRIBE City;
    # 等同于
    SHOW COLUMNS FROM City;

    2、获取执行计划信息

    • DESCRIBE 可以查询 SELECT, DELETE, INSERT, REPLACE, UPDATE 的执行信息。MySQL 8.0.19 也可以查询 TABLE 语句。

    • MySQL从优化器获取可解释语句的执行计划信息,包括参与的表、顺序等信息。

    • 如果使用FOR CONNECTION connection_id语句,MySQL显示该命名连接的执行计划。

    • EXPLAIN 语句产生的执行计划信息可以通过 SHOW WARNINGS 显示。

    • FORMAT 选项用于指定输出格式,TRADITIONAL 是默认的输出格式,以表格形式显示。

    EXPLAIN 需要的权限与被执行解释语句的权限相同,解释 view 语句时需要 SHOW VIEW 权限,EXPLAIN ... FOR CONNECTION需要 PROCESS 权限。
    可以使用 SELECT STRAIGHT_JOIN 来告诉优化器使用 SELECT 指定的连接顺序。

    3、使用 EXPLAIN ANALYZE 获取信息

    MySQL 8.0.18 推荐使用 EXPLAIN ANALYZE,该语句可以输出语句的执行时间和以下信息

    • 预计执行时间

    • 预计返回的行数

    • 返回第一行的时间

    • 迭代器的执行时间,单位毫秒

    • 迭代器返回的行数

    • 执行循环的次数

    查询信息以 TREE 的形式输出,每个节点代表一个迭代器。EXPLAIN ANALYZE 可以用于 SELECT 语句,以及多表的 UPDATE 和 DELETE 语句,MySQL 8.0.19 以后也可以用于 TABLE 语句。EXPLAIN ANALYZE 不能使用 FOR CONNECTION 。

    MySQL 8.0.20 以后可以通过 KILL QUERY 或 CTRL-C 终止该语句的执行。

    mysql> EXPLAIN ANALYZE SELECT * FROM t1 JOIN t2 ON (t1.c1 = t2.c2)\G
    *************************** 1. row ***************************
    EXPLAIN: -> Inner hash join (t2.c2 = t1.c1)  (cost=4.70 rows=6)
    (actual time=0.032..0.035 rows=6 loops=1)
       -> Table scan on t2  (cost=0.06 rows=6)
    (actual time=0.003..0.005 rows=6 loops=1)
       -> Hash
           -> Table scan on t1  (cost=0.85 rows=6)
    (actual time=0.018..0.022 rows=6 loops=1)
    
    mysql> EXPLAIN ANALYZE SELECT * FROM t3 WHERE i > 8\G
    *************************** 1. row ***************************
    EXPLAIN: -> Filter: (t3.i > 8)  (cost=1.75 rows=5)
    (actual time=0.019..0.021 rows=6 loops=1)
       -> Table scan on t3  (cost=1.75 rows=15)
    (actual time=0.017..0.019 rows=15 loops=1)
    
    mysql> EXPLAIN ANALYZE SELECT * FROM t3 WHERE pk > 17\G
    *************************** 1. row ***************************
    EXPLAIN: -> Filter: (t3.pk > 17)  (cost=1.26 rows=5)
    (actual time=0.013..0.016 rows=5 loops=1)
       -> Index range scan on t3 using PRIMARY  (cost=1.26 rows=5)
    (actual time=0.012..0.014 rows=5 loops=1)

    关于“MySQL中EXPLAIN语句怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“MySQL中EXPLAIN语句怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注蜗牛博客行业资讯频道。

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    评论

    有免费节点资源,我们会通知你!加入纸飞机订阅群

    ×
    天气预报查看日历分享网页手机扫码留言评论Telegram