私は次のクエリを使用しています。このクエリでは、参照されているテーブルに5,000万以上のレコードがあります。履歴テーブルを作成することで、CPUパフォーマンスを向上させることができますか?または、パーティション以外のオプションはありますか。または、クエリプランの微調整が唯一のオプションですか?
SELECT MIN(minbkt),
maxbkt,
SUBSTRB(DUMP(MIN(val), 16, 0, 32), 1, 120) minval,
SUBSTRB(DUMP(MAX(val), 16, 0, 32), 1, 120) maxval,
SUM(rep) sumrep,
SUM(repsq) sumrepsq,
MAX(rep) maxrep,
COUNT(*) bktndv,
SUM(CASE
WHEN rep = 1 THEN
1
ELSE
0
END) unqrep
FROM (SELECT val,
MIN(bkt) minbkt,
MAX(bkt) maxbkt,
COUNT(val) rep,
COUNT(val) * COUNT(val) repsq
FROM (SELECT
/*+ no_parallel(t) no_parallel_index(t) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring */
"VERSION_LABEL" val,
NTILE(75) OVER(ORDER BY NLSSORT("VERSION_LABEL", 'NLS_SORT = binary')) bkt
FROM "User"."AUDITTRAIL" t
WHERE "VERSION_LABEL" IS NOT NULL)
GROUP BY val)
GROUP BY maxbkt
ORDER BY maxbkt