从 TPCH 测试学习性能优化技巧之 Q15

ChongTuWang
• 阅读 989

一、 查询要求

Q15语句查询获得某段时间内为总收入贡献最多的供货商(排名第一)的信息。可用以决定对哪些头等供货商给予奖励、给予更多订单、给予特别认证、给予鼓舞等激励。

Q15语句的特点是:带有分组、排序、聚集、聚集子查询操作并存的普通表与视图的连接操作。

二、 Oracle执行

Oracle编写的查询SQL语句如下:

create view revenue (supplier_no, total_revenue) as

         select

                   l_suppkey,

                   sum(l_extendedprice * (1 - l_discount))

         from

                   lineitem

         where

                   l_shipdate >= date '1995-04-01'

                   and l_shipdate < date '1995-04-01' + interval '3' month

         group by

                   l_suppkey;

select  /+ parallel(n) /

         s_suppkey,

         s_name,

         s_address,

         s_phone,

         total_revenue

from

         supplier,

         revenue

where

         s_suppkey = supplier_no

         and total_revenue = (

                   select

                            max(total_revenue)

                   from

                            revenue

         )

order by

         s_suppkey;

drop view revenue;

其中/*+ parallel(n) */ 是Oracle的并行查询语法,n是并行数。

脚本执行时间,单位:秒

从 TPCH 测试学习性能优化技巧之 Q15

三、 SPL优化

这次查询分为两个阶段,先计算出视图revenue,然后再找出revenue中total_revenue达到最大值的记录。前者是个常规的分组汇总,利用并行和列存提高性能。后者对于SQL来讲只能写成子查询,这就需要进行两次遍历。因为SQL没有引用和集合数据类型,不能直接返回最大值所在记录。而SPL提供了这样的语法,即可以返回最大值本身,也可以返回最大值所在记录,一次遍历就可以计算出来。

SPL脚本如下:

从 TPCH 测试学习性能优化技巧之 Q15

A6计算出视图revenue,A7用maxp@a一次遍历即返回total_revenue最大的那些记录,完成这个运算后再去到supplier表中查出其它字段,减少计算量。

脚本执行时间,单位:秒

从 TPCH 测试学习性能优化技巧之 Q15

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
sql优化之大数据量分页查询(mysql)
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时就需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。谈优化前的准备工作为了对下面列举的一些优化进行测试,需要使用已有的一张表作为实际例子。表名:order\_history。描述:某个业务的订单历史表。主要字段
Wesley13 Wesley13
3年前
MySQL基础学习笔记——数据库优化(2):SQL查询优化
数据库优化SQL查询优化1.避免全表扫描,应该考虑在where及orderby涉及的列上建立索引;2.查询时使用select明确指明所要查询的字段,避免使用select(keys,flushdb等)的操作;3.SQL语句尽量大写,
Stella981 Stella981
3年前
Explain(MySQL高级知识四)
前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。注:本系列随笔如无特殊说明都MySQL版本都为5.7.22。1.explain的作用通过explainsql语句可以知道如下内容:①表的读取顺序。(
Wesley13 Wesley13
3年前
MySQL之查询语句的基本操作
一.查询语句的基本操作1.查询语句的基本操作selectfromwhere:约束条件groupby:分组having:过滤distinct:去
Wesley13 Wesley13
3年前
MYSQL与TiDB的执行计划
前言这里采用了tpch一个数据库的数据量来进行查询计划的对比。并借助tpch中的22条查询语句进行执行计划分析。mysql采用的是标准安装,TiDB采用的是单机测试版,这里的性能结果不能说明其性能差异本文章主要目的是对比Mysql与TiDB在执行sql查询时的差异。mysql版本5.7  TiDB版本v2.0.0rc.4准备
Wesley13 Wesley13
3年前
SQL语句优化
SQL语句优化规范:1\.使用mysqlexplain对sql执行效率进行检测,explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。1)使用方法:在select语句前加上explain即可2)explain分析结果形式如下:table|type
Wesley13 Wesley13
3年前
Mysql索引最佳实践笔记0524
mysql5.7innodb默认存储引擎一、关于索引二、最佳实践三、避坑实践一、关于索引1.索引的作用提高查询效率数据分组、排序避免回表查询优化聚集查询用于多表join关联查询利用唯一性约束、保证数据唯一性innodb行锁实现索引的“
Wesley13 Wesley13
3年前
MySQL之多表查询
阅读目录一多表联合查询二多表连接查询三复杂条件多表查询四子语句查询五其他方式查询六 SQL逻辑查询语句执行顺序(重点)七外键约束八其他约束类型九表与表之间的关系一.多表联合查询!
Wesley13 Wesley13
3年前
MySQL查询优化
在我们使用MySQL数据库时,比较常用也是查询,包括基本查询,关联查询,条件查询等等,对于同一个操作,SQL语句的实现有很多种写法,但是不同的写法查询的性能可能会有很大的差异。这里主要介绍下select查询优化的要点。1\.使用慢查询日志去发现慢查询。2\.使用执行计划去判断查询是否正常运行。3\.总是去测试你的查询
京东云开发者 京东云开发者
7个月前
从MySQL JOIN 算法角度看如何优化SQL
作者:京东物流京东物流一、前言在做MySQL的SQL优化时,如果只涉及到单表查询,那么大部分慢SQL都只需从索引上入手优化即可,通过添加合适的索引来消除全表扫描或者排序操作,执行效果,大概率能实现质的飞跃。然而,在实际生产中,除了单表查询,更多的是多个表的
Doris 性能优化
本文分享自天翼云开发者社区《》,作者:inDoris通过多种查询优化策略,如Join优化、谓词下推、运行时过滤,字典优化,算子优化等,来提供高性能的查询能力。来提升整体性能Join优化在查询中,Join操作往往是非常耗时的。Doris提供了多种Join优化