您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)如何進(jìn)行ClickHouse性能提升中的SQL使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
反例:
select * from app.user_model
正例:
select login_id,name,sex from app.user_model
理由: 只查詢需要的字段可以減少磁盤io和網(wǎng)絡(luò)io,提升查詢性能
反例:
select id ,pv, uv , pv/uv rate from app.scene_model
正例:
select id ,pv, uv from app.scene_model
理由: 虛擬列非常消耗資源浪費(fèi)性能,拿到pv uv后在前端顯示時構(gòu)造比率。
反例:
select id, count(1) cn from app.user_model group by id
正例:
select id from app.user_model
理由: 基數(shù)太大會消耗過多的io和內(nèi)存。
反例:
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和網(wǎng)絡(luò)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永遠(yuǎn)都是拿著右表中的每一條記錄到左表中查找該記錄是否存在。
6. 使用 uniqCombined 替代 distinct
反例:
SELECT count( DISTINCT create_user ) from app.scene_model
正例:
SELECT uniqCombined( create_user ) from app.scene_model
理由: uniqCombined對去重進(jìn)行了優(yōu)化,通過近似去重提升十倍查詢性能
反例:
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返回指定的結(jié)果集數(shù)量,不會進(jìn)行向下掃描,大大提升了查詢效率。
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>...
理由: 時間類型最終會轉(zhuǎn)換成數(shù)值類型進(jìn)行處理,數(shù)值類型在執(zhí)行效率和存儲上遠(yuǎn)好過字符串。
9. 指定查詢分區(qū)獲取必要的數(shù)據(jù)
假設(shè)分區(qū)字段是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
理由: 通過指定分區(qū)字段會減少底層數(shù)據(jù)庫掃描的文件數(shù)量,提升查詢性能
反例:
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
理由: 通過限制分組前結(jié)果集數(shù)量,查詢性能一般能提示數(shù)十倍,甚至上百倍
看完上述內(nèi)容,你們對如何進(jìn)行ClickHouse性能提升中的SQL使用有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。