0

次のような 2 つのテーブルがあります。

table A: FieldID NUMBER (PK), other non-relevant fields
table B: FieldID NUMBER (PK/FK), other non-relevant fields

テーブルは 1 : 0..1 の関係をマップします。具体的には、テーブル A に新しい行が挿入された後、将来のある時点で、テーブル B に追加のデータが入力されます。

この設計はもともと一意の拡張テーブルよりも好まれていたため、null 非許容フィールドがどこにでもあります (データの "B" 部分がいつ入力されるかを予測する可能性がないため)。

さて... A と B からの結合選択のパフォーマンスは驚くほどひどいものです。両方のテーブルで数 100k 行について話していますが、単純な内部結合を完了するには膨大な時間がかかります。

フィールドを B から A に移動する以外に (余分な「null」チェックを避けるためにやりたくないことです)、どうすればパフォーマンスを向上させることができますか?

4

2 に答える 2

1

次のように結合してください:SELECT /*+GATHER_PLAN_STATISTICS*/ ... FROM .. WHERE ...;そして、次の出力を見せてください:SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST'));

これにより、クエリの実行時に推定および実際に見つかった、関連する統計を含む実行計画が表示されます。

于 2013-02-12T10:24:49.410 に答える