如何进行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使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
当前标题:如何进行ClickHouse性能提升中的SQL使用
文章地址:http://scyingshan.cn/article/pispsj.html