1
私は、行1345222のセットのために長い実行時間aprox 20分を取っている以下のクエリを持っています。私は、これを調整する方法、特にBetween句の比較?あなたが唯一の最小値と最大値を必要とするので、より長い時間がかかります。チューニング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 disk> = minmaxdate.maxbk + 6)」はいずれの場合も真です –
実際のテーブル?また、なぜクエリ全体の中に 'SELECT ... FROM DUAL'があるのかわかりません。あなたはそれを移動できませんか? – FDavidov
MIN/MAX OVERではなく、両方でグループで試行してください。そして、問合せによる接続をWITH – Thomas