1. 程式人生 > 其它 >ClickHouse 高階(一)Explain 檢視執行計劃

ClickHouse 高階(一)Explain 檢視執行計劃

0 Explain 檢視執行計劃

  在 clickhouse 20.6 版本之前要檢視 SQL 語句的執行計劃需要設定日誌級別為 trace 才能可以看到,並且只能真正執行 sql,在執行日誌裡面檢視。在 20.6 版本引入了原生的執行計 劃的語法。在 20.6.3 版本成為正式版本的功能。 本文件基於目前較新穩定版 21.7.3.14。

1 基本語法

EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...] 
SELECT ... [FORMAT ...]
PLAN:用於檢視執行計劃,預設值。   ◼header 列印計劃中各個步驟的 head 說明,預設關閉,預設值 0;   ◼description 列印計劃中各個步驟的描述,預設開啟,預設值 1;   ◼actions 列印計劃中各個步驟的詳細資訊,預設關閉,預設值 0。 ➢AST :用於檢視語法樹; ➢SYNTAX:用於優化語法; ➢PIPELINE:用於檢視 PIPELINE 計劃。   ◼header 列印計劃中各個步驟的 head 說明,預設關閉;   ◼graph 用 DOT 圖形語言描述管道圖,預設關閉,需要檢視相關的圖形需要配合graphviz 檢視;   ◼actions 如果開啟了 graph,緊湊列印打,預設開啟。 注:PLAN 和 PIPELINE 還可以進行額外的顯示設定,如上引數所示。

2 案例實操

2.1 新版本使用 EXPLAIN

  可以再安裝一個 20.6 以上版本,或者直接在官網的線上 demo,選擇高版本進行測試。   官網線上測試連結:https://play.clickhouse.tech/?file=welcome 1)檢視 PLAIN   簡單查詢
explain plan select arrayJoin([1,2,3,null,null]);
  複雜 SQL 的執行計劃
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;
  開啟全部的引數的執行計劃
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 語法優化
//先做一次查詢
SELECT number = 1 ? 'hello' : (number
= 2 ? 'world' : 'atguigu') FROM numbers(10); //檢視語法優化 EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10); //開啟三元運算子優化 SET optimize_if_chain_to_multiif = 1; //再次檢視語法優化 EXPLAIN SYNTAX SELECT number = 1 ? 'hello' : (number = 2 ? 'world' : 'atguigu') FROM numbers(10); //返回優化後的語句 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; //開啟其他引數
EXPLAIN PIPELINE header
=1,graph=1 SELECT sum(number) FROM numbers_mt(10000) GROUP BY number%20;
2.2 老版本檢視執行計劃
clickhouse-client -h 主機名 --send_logs_level=trace <<< "sql" > /dev/null
其中,send_logs_level 引數指定日誌等級為 trace,<<<將 SQL 語句重定向至 clickhouse-client 進行查詢,> /dev/null 將查詢結果重定向到空裝置吞掉,以便觀察日誌。 注意: 1、通過將 ClickHouse 的服務日誌,設定到 DEBUG 或者 TRACE 級別,才可以變相實現EXPLAIN 查詢的作用。 2、需要真正的執行 SQL 查詢,CH 才能列印計劃日誌,所以如果表的資料量很大,最好藉助 LIMIT 子句,減小查詢返回的資料量。