如何进行ClickHouse性能提升中的SQL使用
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,今天就跟大家聊聊有关如何进行ClickHouse性能提升中的SQL使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 不要用select
千家信息网最后更新 2025年12月03日如何进行ClickHouse性能提升中的SQL使用1. 不要用select *
今天就跟大家聊聊有关如何进行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安全错误
数据库的锁怎样保障安全
广州川羽网络技术有限公司
中国电子信息产业发展网网络安全
驱动装了还是没有网络安全
车载网络技术实训报告
多功能软件开发铸造辉煌
暴雪服务器忙
木瓜互联网科技布沙发品牌推荐
外资银行网络安全规范
数据库技术与应用心得
软件开发笔试问题
荣耀手机王牌竞速无法连接服务器
消息中间件服务器
删除安卓的sqlite数据库
数据库都有哪些检索功能
数据库表列表怎么看
大唐至尊网络技术有限公司
德国我的世界服务器
韩剧网络安全类
互联网科技发展是社会
2018全球数据库软件市场
鳄梨测试服务器
金融科技与互联网医疗
课程思政软件开发
马鞍山设备维护管理软件开发平台
分布式架构服务器
软件开发方面大学学什么专业
邮储银行软件开发招聘考试题
梦幻西游2网络连接服务器
lol登录错误登陆服务器未响应
德国我的世界服务器