今天给大家分享一个小技巧吧,在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 | | 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 | | 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-explainPAGER 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 scanrows 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 sbtest14 rows in set, 1 warning (0.00 sec)
树形展示,看起来就非常直观,从下往上看,SQL如何执行的一目了然。
如何取消树形展示呢,非常简单,只需要执行下面的命令即可。
[root@localhost] 20:25:45 [t_db]>pagerDefault pager wasn’t set, using stdout.