0
SQLパフォーマンスの問題が発生しました。基本的に私たちはテーブルt1
(当社データテーブル)を得た、とt2
(弊社サポート値)大規模なデータセットのSQL最適化
SELECT *
FROM (SELECT /*+ FIRST_ROWS(26) */
a.*, ROWNUM rnum
FROM (SELECT *
FROM t1
WHERE t1_col1 = 'val1'
AND g_dom in ('1', '2', '3')
AND g_context IN ('3', '4', '5', '6')
AND i_col = 1
AND f_col in ('1', '2', '3', '4')
AND e_g IN (SELECT e_g
FROM t2
WHERE t2_col1 = 'val1'
AND g_context IN ('3', '4', '5', '6')
AND val like 'some val%')
ORDER BY order_id DESC) a)
WHERE rnum > 0;
:私は次のようなステートメントを実行する必要があります。 t1
に1kkレコード、t2
に10kkというレコードがあります。カラムg_context
はデータセットを絞り込みますが、valは500kレコードのようなものでした。 order_idで順序付けられた25行が必要です。
SELECT e_g FROM t2 WHERE t2_col1='val1' AND g_context IN('3','4','5','6') AND val like 'some val%
だが、外側の文の基準を一致させるだけで25レコードを取得するために、内部のステートメントを指示する方法はありますか?
質問のために "説明計画"を表示してください。あなたの意見の中でどんな種類の条件が最も選択的であるかを指定します。条件rnum> 0はどうですか?常に真です – Mike
ORDER_IDにインデックスがありますか? – sers
'' rnum> 0'述語は何をしていますか? 25行だけが必要な場合は、 'rnum <= 25'とすると、オプティマイザがクエリプランでストップキーを使用できるはずです。それはあなたが望むもののように思えますが、クエリプランがなければ、知るのは難しいです。上位25行を取得するためにスキャンできるインデックスがない場合は、それが問題になります。 –