presto sql语句优化

本文分享了六种提升SQL查询效率的方法,包括避免使用函数转换、合理排序GROUP BY字段、结合ORDER BY与LIMIT、使用正则表达式代替多个LIKE、利用row_number()函数优化执行计划以及在查询分区表时应用分区字段过滤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写高效sql语句,效率瞬间提升

1.避免使用函数转换,如to_char
高效写法:
select ... from ... where time=cast('20190101' as date)
低效写法:
select ... from ... where to_char(time,'yyyymmdd')='20190101'
经过测试,第一种比第二种执行时间少一半

2.group by 中字段顺序按选择性高低排序
高效写法:
select ... from ... group by id,sex
低效写法:
select ... from ... group by sex,id

3.order by 与limit搭配使用

4.使用正则函数取代多个like
高效写法:
select ... from ... where regexp_like(method,'get|post|put')
低效写法:
select ... from ... where method like '%get%' or method like '%post%' or method like '%put%'

5.row_number() over 提高效率用法
由于presto对执行计划的推断存在误差,取数一定要在where条件后加上:where (rn=1 or rand()<0)以得到高效的执行计划。
原理:如果不加or rand()<0 ,presto的执行计划中使用的是TopNRowNumberOperator执行器,效率很低下,加上以后会在不影响执行结果的同时,诱导Presto选择Window执行器,调高执行效率。

6.分区表的查询尽量带上分区字段进行过滤

 

 

帮分析师改sql,遇到如下问题:

1.min,max函数比较两个字段
错误写法:min(a,b)
正确写法:case when a<b then a else b end

2.select * 问题
只用到几个字段,应该一一列出,不能用*,尤其*代表字段特别多的时候。

3.语法问题,笛卡尔积--怎么都跑不出来
select id
from test1 a 
inner test2 b on a.id=b.id
inner test3 c on b.id=b.id

4.用中文当别名建表失败
create table test as select amount as "金额" from loan;
会报一个这样的错:
Query 20190911_072027_10761_d8e6m failed: Add request failed : INSERT INTO `COLUMNS_V2` (`CD_ID`,`COMMENT`,`COLUMN_NAME`,`TYPE_NAME`,`INTEGER_IDX`) VALUES (?,?,?,?,?)
解决:将中文别名改成英文即可

Presto是Facebook最新研发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析。据称该引擎的性能是 Hive 的 10 倍以上。 PrestoDB 是 Facebook 推出的一个大数据的分布式 SQL 查询引擎。可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别。 Presto 可以查询包括 Hive、Cassandra 甚至是一些商业的数据存储产品。单个 Presto 查询可合并来自多个数据源的数据进行统一分析。 Presto 的目标是在可期望的响应时间内返回查询结果。Facebook 在内部多个数据存储中使用 Presto 交互式查询,包括 300PB 的数据仓库,超过 1000 个 Facebook 员工每天在使用 Presto 运行超过 3 万个查询,每天扫描超过 1PB 的数据。此外包括 Airbnb 和 Dropbox 也在使用 Presto 产品。 Presto 是一个分布式系统,运行在集群环境中,完整的安装包括一个协调器 (coordinator) 和多个 workers。查询通过例如 Presto CLI 的客户端提交到协调器,协调器负责解析、分析和安排查询到不同的 worker 上执行。 此外,Presto 需要一个数据源来运行查询。当前 Presto 包含一个插件用来查询 Hive 上的数据,要求: Hadoop CDH4 远程 Hive metastore service Presto 不使用 MapReduce ,只需要 HDFS 要求: Mac OS X or Linux Java 7, 64-bit Maven 3 (for building) Python 2.4 (for running with the launcher script) 标签:PrestoDB  查询引擎  大数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值