如何进行ClickHouse性能提升中的SQL使用
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,今天就跟大家聊聊有关如何进行ClickHouse性能提升中的SQL使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 不要用select
千家信息网最后更新 2024年11月26日如何进行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安全错误
数据库的锁怎样保障安全
苹果电脑的网络安全密码
七日杀服务器1人占用多少内存
我的世界网易个人服务器关闭状态
为局域网设置代理服务器怎么做
横琴澳瑞真互联网科技有限公司
排列五299期数据库
学网络安全行业
网络安全知识竞赛组织机构
有没有r数据库有哪些
健康服务器
用office数据库关联
网络技术对接
四川农村劳动力实名制登记数据库
漳州联赢网络技术有限公司
清华大学网络安全博士招生
台推网络安全
三级网络技术备考方法
网络安全事件是指什么
网络安全审计系统路由
铜川软件开发简介
软件开发者怎么查
肇庆网络服务器
甘肃省网络安全视频
知名网络安全会议
青岛利睿腾互联网科技
数据库中逻辑结构设计的主要任务
企业的网络技术有哪些
台推网络安全
张店陶瓷库存软件开发
如何对数据库进行打包签名