<返回更多

如何将MySQL数据库的SQL执行计划树形展示

2022-06-22    月牙讲数据库运维
加入收藏

今天给大家分享一个小技巧吧,在MySQL数据库里,使用explain命令,查看的SQL执行计划都是以表格方式展示,有时候看起来觉得不够直观。

例如:

[root@localhost] 20:23:52 [t_db]>explain SELECT * FROM ( SELECT * FROM sbtest1 UNION SELECT * FROM sbtest1 ORDER BY c DESC) t LIMIT 1;
+----+--------------+------------+------------+------+---------------+------+---------+------+---------+----------+---------------------------------+
| id | select_type  | table      | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra                           |
+----+--------------+------------+------------+------+---------------+------+---------+------+---------+----------+---------------------------------+
|  1 | PRIMARY      | <derived2> | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 9762228 |   100.00 | NULL                            |
|  2 | DERIVED      | sbtest1    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 4881114 |   100.00 | NULL                            |
|  3 | UNION        | sbtest1    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 4881114 |   100.00 | NULL                            |
| NULL | UNION RESULT | <union2,3> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    NULL |     NULL | Using temporary; Using filesort |
+----+--------------+------------+------------+------+---------------+------+---------+------+---------+----------+---------------------------------+
4 rows in set, 1 warning (0.00 sec)

这个执行计划,如果不太熟悉的同学,可能就不太知道,SQL执行的时候,到底是先使用临时表呢,还是先文件排序。但是如果用树形展示,就非常直观明了。

[root@localhost] 20:24:02 [t_db]>pager pt-visual-explain
PAGER set to 'pt-visual-explain'
[root@localhost] 20:24:27 [t_db]>explain SELECT * FROM ( SELECT * FROM sbtest1 UNION SELECT * FROM sbtest1 ORDER BY c DESC) t LIMIT 1;
Table scan
rows           9762228
+- DERIVED
   table          derived(temporary(union(sbtest1,sbtest1)))
   +- Table scan
      +- TEMPORARY
         table          temporary(union(sbtest1,sbtest1))
         +- Filesort
            +- Table scan
               +- UNION
                  table          union(sbtest1,sbtest1)
                  +- Table scan
                  |  rows           4881114
                  |  +- Table
                  |     table          sbtest1
                  +- Table scan
                     rows           4881114
                     +- Table
                        table          sbtest1
4 rows in set, 1 warning (0.00 sec)

树形展示,看起来就非常直观,从下往上看,SQL如何执行的一目了然。

如何取消树形展示呢,非常简单,只需要执行下面的命令即可。

[root@localhost] 20:25:45 [t_db]>pager
Default pager wasn't set, using stdout.
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>