减少大型查询的执行时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了减少大型查询的执行时间相关的知识,希望对你有一定的参考价值。

我的查询需要30多分钟才能处理此查询。它确实适用于非常大的数据集,但是我可能会遗漏一些可以减少执行时间的基本内容。

查询适用于许多减速器阶段,每个阶段使用1000+减速器。在Tez引擎上运行。

我试图启用CBO但没有运气,也尝试将减速器限制为500但执行时间仍然很长。

select itt.tr_date, sum (bkt_sum_pc) as pts 
from itops_trxn itt,
( select acttrxnID, max(act_cmp_id) as act_cmp_id 
   from itops_trxn_act a, ll_act_act_trxn b where a.act_trxn_ID = b.ACOUNTtrxnID group by  acttrxnID 
) A, 
(select cmp_id, max (cmp_name) as name 
   from itops_offer group by  cmp_id
) c 
where itt.acttrxnID = A.acttrxnID and act_cmp_id = c.cmp_id
and itt.type = 'ajstmnt' 
and itt.event_header_event_name NOT IN ('composite.sys.act.merge', 'pos.sys.identity', 'composite.sys.act.pcmerge') 
and itt.event_atomic_operation_type  = 'CT'
and itt.tr_date >='2018-10-31' 
group by itt.tr_date, channel, location_storeparentid, meta_trxnreason,  act_cmp_id,name; 
答案

明确重写联接并移动这些条件

where itt.acttrxnID = A.acttrxnID and act_cmp_id = c.cmp_id

到join ON子句:

select itt.tr_date, sum (bkt_sum_pc) as pts 
from itops_trxn itt
INNER JOIN
( select acttrxnID, max(act_cmp_id) as act_cmp_id 
   from itops_trxn_act a, ll_act_act_trxn b where a.act_trxn_ID = b.ACOUNTtrxnID group by  acttrxnID 
) A           ON itt.acttrxnID = A.acttrxnID
INNER JOIN 
(select cmp_id, max (cmp_name) as name 
   from itops_offer group by  cmp_id
) c           ON A.act_cmp_id = c.cmp_id
where itt.type = 'ajstmnt' 
and itt.event_header_event_name NOT IN ('composite.sys.act.merge', 'pos.sys.identity', 'composite.sys.act.pcmerge') 
and itt.event_atomic_operation_type  = 'CT'
and itt.tr_date >='2018-10-31' 
group by itt.tr_date, channel, location_storeparentid, meta_trxnreason,  act_cmp_id,name; 

以上是关于减少大型查询的执行时间的主要内容,如果未能解决你的问题,请参考以下文章

片段视图返回后执行的 Firebase 查询

Unity2019 增量式GC(使用时间片段执行GC,减少卡顿)

Unity2019 增量式GC(使用时间片段执行GC,减少卡顿)

在 PHP 中执行大型 SQL 查询字符串时出现“内存不足”错误

c#执行大型SQL语句[关闭]

如何减少用本机 Visual C++ 编写的大型项目的链接时间?