千家信息网

如何进行ClickHouse性能提升中的SQL使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天就跟大家聊聊有关如何进行ClickHouse性能提升中的SQL使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 不要用select
千家信息网最后更新 2026年11月03日如何进行ClickHouse性能提升中的SQL使用

今天就跟大家聊聊有关如何进行ClickHouse性能提升中的SQL使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. 不要用select *

反例:


select * from app.user_model

正例:



select login_id,name,sex from app.user_model
理由:    只查询需要的字段可以减少磁盘io和网络io,提升查询性能

2.不要在大结果集上构造虚拟列

反例:


select id ,pv, uv , pv/uv rate from app.scene_model

正例:



select id ,pv, uv from app.scene_model
理由:    虚拟列非常消耗资源浪费性能,拿到pv uv后在前端显示时构造比率。

3. 不要在唯一列或大基数列上进行分组或去重操作

反例:


select id, count(1) cn from app.user_model group by id

正例:



select id  from app.user_model
理由:    基数太大会消耗过多的io和内存。

4. 根据需要查询指定范围的数据 (where)

反例:


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,提升查询性能

5. 关联查询时小表在后(大表 join 小表)

反例:


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对去重进行了优化,通过近似去重提升十倍查询性能

7. 通过使用 limit 限制返回数据条数

反例:


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 = ...

正例:

CREATE TABLE scene_model(    id String,    scene_name String,    pv Int32,    create_time Date)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
理由:    通过指定分区字段会减少底层数据库扫描的文件数量,提升查询性能

10.分组前过滤不必要的字段

反例:


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使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

理由 查询 性能 字段 数据 类型 内容 数量 结果 分组 基数 字符 字符串 效率 数值 磁盘 网络 消耗 限制 必要 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 新华互联网科技学校 圆梦互联网科技 万易互联网科技 互联网 的科技创新 礼当家互联网科技 卓越科技(互联网 ) 华中科技大学互联网 上海喔噻互联网科技 互联网科技大会案例 互联网新科技动漫ppt素材 翼展科技 首家互联网医院 云南省自由互联网科技有限公司 启辰互联网科技 皮皮虾互联网科技有限公司 上海互联网科技公司ppt 半导体行业属于互联网高科技类吗 互联网科技手机排行榜 科技互联网经济论坛 恒生科技指数 中概互联网 科技互联网政务服务 玖二柒互联网科技公司待遇 深圳国际航运科技和互联网 贵州叶脉互联网科技有限公司所属行业 荆州市昕露互联网络科技有限公司 银川新华互联网科技学校联系电话 互联网科技人工智能实验室 扫呗互联网科技有限公司 宁波跨境商互联网科技有限公司 唐山双旺合互联网科技产业园
0