ClickHouse 高級(一)優化(1)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 子句,減小查詢返回的數據量。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM