今天給大家分享一個(gè)小技巧吧,在MySQL數(shù)據(jù)庫(kù)里,使用explain命令,查看的SQL執(zhí)行計(jì)劃都是以表格方式展示,有時(shí)候看起來(lái)覺(jué)得不夠直觀。
例如:
[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)
這個(gè)執(zhí)行計(jì)劃,如果不太熟悉的同學(xué),可能就不太知道,SQL執(zhí)行的時(shí)候,到底是先使用臨時(shí)表呢,還是先文件排序。但是如果用樹(shù)形展示,就非常直觀明了。
[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)
樹(shù)形展示,看起來(lái)就非常直觀,從下往上看,SQL如何執(zhí)行的一目了然。
如何取消樹(shù)形展示呢,非常簡(jiǎn)單,只需要執(zhí)行下面的命令即可。
[root@localhost] 20:25:45 [t_db]>pagerDefault pager wasn’t set, using stdout.