您好,登錄后才能下訂單哦!
這篇文章主要介紹clickhouse SQL優化技巧有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
sql慢查大部分主要體現在cpu 負載過高,io過高,或者查詢的列中無索引導致的;注意;clickhouse本身不太支持高并發的場景,qps過高會導致clickhouse服務器cpu過高,導致慢查
在這些情況下;常見的考慮的是 sql中是否有復雜的運算,查詢的數量量是否過大,查詢的列中索引是否有效;
sql 查詢特點:數量大,且分區跨度大
data表格中有8億多條數據,data表按照p_data_day 分區;
select sn,COUNT(1) as valueQt from data WHERE sn='70A0600018109' and p_day >= '2017-01-01' and p_data_day < '2020-08-13'group by sn;
數據會遍歷整個分區,數據平均在1s左右分鐘返回 ;
優化思路:減少不必要數據的遍歷(分區);充分利用clickhouse 索引(group by 索引)
針對sn的查詢,建立物化視圖;將8億條數據按照sn號以及device_id(mac_code)建立256個分區;
create MATERIALIZED VIEW IF NOT EXISTS data_sn_materializedengine = ReplicatedMergeTree('/clickhouse/tables/{ck_cluster}/data_sn_materialized', '{replica}')PARTITION BY sn_sort_key ORDER BY (sn_sort_key,sn,p_day)AS select halfMD5(_sn) % 256 as sn_sort_key,sn,p_day,count() as cnt from data group by sn_sort_key,sn,p_day;
查詢語句;保持原來的出參和入參不變,數據能夠在200ms以內返回,
sql 查詢特點:數量大,且分區跨度大
data 表格數據量在10億多條,建表語句如下
CREATE TABLE data (`data_day` Date, `flow_type` UInt32 DEFAULT CAST(0, 'UInt32'),.....) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{ck_cluster}/data', '{replica}') PARTITION BY data_day ORDER BY (flow_type, data_day) SETTINGS index_granularity = 8192;
查詢語句
select ... from data where data_day = '2020-09-11'
CREATE TABLE dwrt.lc_order_flow (
`data_day` Date,
.....
`flow_type` UInt32 DEFAULT CAST(0,
'UInt32'),
....
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{ck_cluster}/data', '{replica}') PARTITION BY data_day ORDER BY (data_day, flow_type) TTL data_day + toIntervalDay(7) SETTINGS index_granularity = 8192;
以上是“clickhouse SQL優化技巧有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。