我有下面的查询,这是花了很长的执行时间aprox一组行1345222 20分钟。我有一种方法来调整这一点,特别是之间的条款比较?需要较长的时间。调整SQL查询
<code>
SELECT /*+ PARALLEL(32) */ upexp.item,
upexp.loc,
startdate,
sku_exp.bucket_size,
MAX(upexp.sku_multiplier) OVER (PARTITION BY upexp.item,upexp.loc) max_sm
FROM
(SELECT bucket bkt,
MIN(dates) OVER (PARTITION BY bucket) minbk,
MAX(dates) OVER (PARTITION BY bucket) maxbk
FROM (
SELECT LEVEL AS sl,
NEXT_DAY (TRUNC (SYSDATE, 'YEAR') + 7 * LEVEL - 8,'SATURDAY') AS dates,
CEIL (LEVEL/4) AS bucket
FROM DUAL
CONNECT BY LEVEL <= ((4 - MOD (78, 4) + 78) + 78)) yy
-- GROUP BY bucket
) minmaxdate ,
stsc.u_promo_sku_expand sku_exp,
stsc.u_promo_upload_expand upexp
WHERE sku_exp.bucket_size = 4
AND sku_exp.startdate BETWEEN minmaxdate.minbk AND minmaxdate.maxbk
AND upexp.item = sku_exp.item
AND upexp.loc = sku_exp.loc
AND upexp.u_country = sku_exp.u_country
AND ((eff BETWEEN minmaxdate.minbk AND minmaxdate.maxbk+6)
OR (disc BETWEEN minmaxdate.minbk AND minmaxdate.maxbk+6)
OR (eff <= minmaxdate.minbk AND disc >= minmaxdate.maxbk+6))
</code>
哪里是计划? '(eff BETWEEN minmaxdate.minbk AND minmaxdate.maxbk + 6)或eff <= minmaxdate.minbk AND disc> = minmaxdate.maxbk + 6)'在任何情况下都为真 –
您是否有任何为实际表格?另外,我不太明白为什么在整个查询中有'SELECT ... FROM DUAL'。你不能移动它吗? – FDavidov
用两个组来尝试组,而不是MIN/MAX OVER。并且将查询连接移出到WITH – Thomas