您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何進行ClickHouse性能提升中的SQL使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
反例:
select * from app.user_model
正例:
select login_id,name,sex from app.user_model
理由: 只查詢需要的字段可以減少磁盤io和網絡io,提升查詢性能
反例:
select id ,pv, uv , pv/uv rate from app.scene_model
正例:
select id ,pv, uv from app.scene_model
理由: 虛擬列非常消耗資源浪費性能,拿到pv uv后在前端顯示時構造比率。
反例:
select id, count(1) cn from app.user_model group by id
正例:
select id from app.user_model
理由: 基數太大會消耗過多的io和內存。
反例:
select login_id,name,sex from app.user_model
正例:
select login_id,name,sex from app.user_model where create_time>'2020-03-30'
理由: 減少磁盤io和網絡io,提升查詢性能
反例:
select login_id,name,sex,a.scene_name from app.scene_model a join app.user_model b on a.create_user=b.id
正例:
select login_id,name,sex,a.scene_name from app.user_model a join app.scene_model b on a.id=b.create_user
理由:
無論是Left Join 、Right Join還是Inner Join永遠都是拿著右表中的每一條記錄到左表中查找該記錄是否存在。
6. 使用 uniqCombined 替代 distinct
反例:
SELECT count( DISTINCT create_user ) from app.scene_model
正例:
SELECT uniqCombined( create_user ) from app.scene_model
理由: uniqCombined對去重進行了優化,通過近似去重提升十倍查詢性能
反例:
select id,scene_name,code,pv from app.scene_model order by pv desc
正例:
select id,scene_name,code,pv from app.scene_model order by pv desc limit 100
理由:
使用limit返回指定的結果集數量,不會進行向下掃描,大大提升了查詢效率。
8. 盡量不去使用字符串類型
反例:
CREATE TABLE scene_model( id String, scene_name String, pv String, create_time String)ENGINE = <Engine>...
正例:
CREATE TABLE scene_model( id String, scene_name String, pv Int32, create_time Date)ENGINE = <Engine>...
理由: 時間類型最終會轉換成數值類型進行處理,數值類型在執行效率和存儲上遠好過字符串。
9. 指定查詢分區獲取必要的數據
假設分區字段是day
反例:
select type,count(1) from app.user_model group by type
正例:
select type,count(1) from app.user_model where day ='2020-03-30' group by type
理由: 通過指定分區字段會減少底層數據庫掃描的文件數量,提升查詢性能
反例:
select type,count(1) from app.user_model group by type
正例:
select type,count(1) from app.user_model where type ='1' or type ='2' group by type
理由: 通過限制分組前結果集數量,查詢性能一般能提示數十倍,甚至上百倍
看完上述內容,你們對如何進行ClickHouse性能提升中的SQL使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。