- ベストアンサー
Oracle10gで同じテーブルを複数回結合する場合のパフォーマンス向上方法
- Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力に時間がかかる問題があります。テンポラリテーブルを使用しない方法でこの問題を解決する方法はあるのでしょうか?
- Oracle10gで同じテーブルを複数回結合するとパフォーマンスが低下する問題があります。1つのSQLで結果を出力する方法で、この問題を解決する方法はありますか?
- Oracleの1つのSQL内で同じテーブルを複数回結合するとパフォーマンスが低下します。テンポラリテーブルを使用せずにパフォーマンスを向上させる方法はありますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id ここの「テーブルBを2回結合している」-> 意味ない。 -> SELECT * FROM A, B b1 WHERE a.id = b1.id → 結果件数同じです。 実行時間テスト。 テーブルA/Bのデータ件数=10000件 ******* VISUAL SQLTOOLS - Log ************ 14:38:04:890 SQL: SELECT * FROM TEST_TABLE , TEST_TABLE1 b1 , TEST_TABLE1 b2 WHERE TEST_TABLE.id = b1.id AND TEST_TABLE.id = b2.id ->: 10000 件 0.562秒 14:38:05:546 SQL: SELECT * FROM TEST_TABLE , TEST_TABLE1 b1 WHERE TEST_TABLE.id = b1.id ->: 10000 件 0.390秒 14:38:05:984 SQL: SELECT TEST_TABLE.ID FROM TEST_TABLE , TEST_TABLE1 b1 , TEST_TABLE1 b2 WHERE TEST_TABLE.id = b1.id AND TEST_TABLE.id = b2.id ->: 10000 件 0.078秒 14:38:06:125 SQL: SELECT TEST_TABLE.ID FROM TEST_TABLE , TEST_TABLE1 b1 WHERE TEST_TABLE.id = b1.id ->: 10000 件 0.062秒 ご参照ください。
その他の回答 (1)
テーブルを2回結合してまでやりたい事が見えないので回答が的外れかもしれませんが… ・select句で「*」で抽出させるのをやめる。 (必要な項目は指定する) ・idにインデックスを張る。 このSQLで一番良いのは2回結合しない事ですが、やるとしたらこんな風にしか出来ないんじゃないでしょうか。 テーブル構成や各テーブル間の関係、テーブルから返ってくるデータ量によってパフォーマンスは変わるので一概にこれ!と言えるものはないと思いますよ。