ClickHouse 高級(一)優(yōu)化(1)Explain 查看執(zhí)行計劃
目錄
0 Explain 查看執(zhí)行計劃
1 基本語法
2 案例實操
0 Explain 查看執(zhí)行計劃
在 clickhouse 20.6 版本之前要查看 SQL 語句的執(zhí)行計劃需要設(shè)置日志級別為 trace 才能可以看到,并且只能真正執(zhí)行 sql,在執(zhí)行日志里面查看。在 20.6 版本引入了原生的執(zhí)行計劃的語法。在 20.6.3 版本成為正式版本的功能。
本文檔基于目前較新穩(wěn)定版 21.7.3.14。
1 基本語法
EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...] SELECT ... [FORMAT ...]
PLAN:用于查看執(zhí)行計劃,默認(rèn)值。
?header 打印計劃中各個步驟的 head 說明,默認(rèn)關(guān)閉,默認(rèn)值 0;
?description 打印計劃中各個步驟的描述,默認(rèn)開啟,默認(rèn)值 1;
?actions 打印計劃中各個步驟的詳細(xì)信息,默認(rèn)關(guān)閉,默認(rèn)值 0。
?AST :用于查看語法樹;
?SYNTAX:用于優(yōu)化語法;
?PIPELINE:用于查看 PIPELINE 計劃。
?header 打印計劃中各個步驟的 head 說明,默認(rèn)關(guān)閉;
?graph 用 DOT 圖形語言描述管道圖,默認(rèn)關(guān)閉,需要查看相關(guān)的圖形需要配合graphviz 查看;
?actions 如果開啟了 graph,緊湊打印打,默認(rèn)開啟。
注:PLAN 和 PIPELINE 還可以進(jìn)行額外的顯示設(shè)置,如上參數(shù)所示。
2 案例實操
2.1 新版本使用 EXPLAIN
可以再安裝一個 20.6 以上版本,或者直接在官網(wǎng)的在線 demo,選擇高版本進(jìn)行測試。
官網(wǎng)在線測試鏈接:https://play.clickhouse.tech/?file=welcome
1)查看 PLAIN
簡單查詢
explain plan select arrayJoin([1,2,3,null,null]);
復(fù)雜 SQL 的執(zhí)行計劃
explain select database,table,count(1) cnt from system.parts where database in ('datasets','system') group by database,table order by database,cnt desc limit 2 by database;
打開全部的參數(shù)的執(zhí)行計劃
EXPLAIN header=1, actions=1,description=1 SELECT number from system.numbers limit 10;
2)AST 語法樹
EXPLAIN AST SELECT number from system.numbers limit 10;
3)SYNTAX 語法優(yōu)化
//先做一次查詢 SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10); //查看語法優(yōu)化 EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10); //開啟三元運算符優(yōu)化 SET optimize_if_chain_to_multiif = 1; //再次查看語法優(yōu)化 EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10); //返回優(yōu)化后的語句 SELECT multiIf(number = 1, \'hello\', number = 2, \'world\', \'xyz\') FROM numbers(10)
4)查看 PIPELINE
EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 20; //打開其他參數(shù)
EXPLAIN PIPELINE header=1,graph=1 SELECT sum(number) FROM numbers_mt(10000) GROUP BY number%20;
2.2 老版本查看執(zhí)行計劃
clickhouse-client -h 主機(jī)名 --send_logs_level=trace <<< "sql" > /dev/null
其中,send_logs_level 參數(shù)指定日志等級為 trace,<<<將 SQL 語句重定向至 clickhouse-client 進(jìn)行查詢,> /dev/null 將查詢結(jié)果重定向到空設(shè)備吞掉,以便觀察日志。
注意:
1、通過將 ClickHouse 的服務(wù)日志,設(shè)置到 DEBUG 或者 TRACE 級別,才可以變相實現(xiàn)EXPLAIN 查詢的作用。
2、需要真正的執(zhí)行 SQL 查詢,CH 才能打印計劃日志,所以如果表的數(shù)據(jù)量很大,最好借助 LIMIT 子句,減小查詢返回的數(shù)據(jù)量。
本文來自博客園,作者:秋華,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/qiu-hua/p/15113481.html

浙公網(wǎng)安備 33010602011771號