从 TPCH 测试学习性能优化技巧之 Q20
一、 查询要求
Q20语句查询确定在某一年内 , 找出指定国家的能对某一零件商品提供更有竞争力价格的供货商 。 所谓更有竞争力的供货商 , 是指那些零件有过剩的供货商 , 超过供货商在某一年中货运给定国的某一零件的50%则为过剩 。
Q20语句的特点是:带有排序、聚集、IN子查询、普通子查询操作并存的两表连接操作 。
二、 Oracle执行
Oracle编写的查询SQL语句如下:
select /*+ parallel(n) */
s_name,s_address
from
supplier,nation
where
s_suppkey in (
select
ps_suppkey
from
partsupp
where
ps_partkey in (
select
p_partkey
from
part
where
p_name like 'bisque%'
)
and ps_availqty > (
select
0.5 * sum(l_quantity)
from
lineitem
where
l_partkey = ps_partkey
and l_suppkey = ps_suppkey
and l_shipdate >= date '1995-01-01'
and l_shipdate < date '1995-01-01' + interval '1' year
)
)
and s_nationkey = n_nationkey
and n_name = 'CHINA'
order by
s_name;
其中/*+ parallel(n) */ 是Oracle的并行查询语法 , n是并行数 。
脚本执行时间 , 单位:秒
本文插图
三、 SPL优化
这个查询看起来很复杂 , 嵌套了很多层 , 这主要是因为SQL不提倡分步运算导致的 。 如果把它分成几步来看 , 情况就比较清楚:
- 按条件过滤nation表
- 按条件过滤part表
- 用1的结果当作外键表去匹配过滤supplier表
- 用2和3的结果当作外键表去匹配过滤partsupp表
- 用4的结果当作外键表去与lineitem表连接 , 并将PS_AVAILQTY字段选出 , 然后按L_PARTKEY、L_SUPPKEY分组聚合 , 前面说过 , 用等值条件与主表关联的子查询都可以改写成分组后再与主表连接的语句 。 分组聚合后选出满足条件的L_SUPPKEY
- 再用5的结果作为外键表去过滤supplier表
SPL脚本如下:
本文插图
脚本执行时间 , 单位:秒
本文插图
【从 TPCH 测试学习性能优化技巧之 Q20】
- 『学霸』学渣变学霸:教育界证明最有效的4个学习方法,建议家长收藏
- 【物理】初二发力学习,初三语文成绩才能逆袭,别让你的小聪明耽误了语文
- 「小学语文」100篇小学语文阅读理解及答案,孩子学习用得上!
- 白宫新冠肺炎确诊病例密接者病毒测试均为阴性
- 央视网美媒:白宫确诊病例密切接触者病毒测试均为阴性
- 军事佳佳乐III测试用机出厂,波音公司首架“超级大黄蜂”Block
- 黑科技三眼看友爆出鸿蒙OS手机测试版,虚晃一枪还是确有其事?
- 黑科技三眼看虚晃一枪还是确有其事?,友爆出鸿蒙OS手机测试版
- 「maven」国乒许昕母亲节的彩虹P,老小都甜蜜,男同胞们排队来学习
- 15个最流行的GitHub机器学习项目