![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67b6d)
2つのテーブルを(内部)結合させる場合、
INNER JOINによる結合と
WHERE句に結合条件を記述する2通りの方法が
あると思いますが、どちらが早いのでしょうか?
なお、Oracle9i、ルールベースにて構築されています。
テーブルの内容、SQL文は下記のとおりです。
ご教授よろしくお願いします。
■表 A
項目A-1 ・・・PRIMARY KEY1、INDEX1
項目A-2 ・・・PRIMARY KEY2、INDEX2
項目A-3 ・・・PRIMARY KEY3
項目A-4
■表 B
項目B-1 ・・・PRIMARY KEY1、INDEX1
項目B-2 ・・・PRIMARY KEY2、INDEX2
項目B-3 ・・・PRIMARY KEY3
項目B-4
※項目A-1と項目B-1にて結合。
項目A-2が"01"と等しいレコード。
表Aのレコード件数>表Bのレコード件数
【WHERE句にて結合】
SELECT * FROM A,B
where A.項目1 = B.項目1
and A.項目2 = '01'
【INNER JOINにて結合】
SELECT * FROM A
INNER JOIN A
ON A.項目1 = B.項目1
AND A.項目2 = '01'
No.3ベストアンサー
- 回答日時:
表定義の見方がよくわかりませんが、PRIMARY KEYを3つのカラムに設定している時点でインデックスは死んでしまっているような気がするのですが。
結合方法をWHERE句に記述してもINNER JOINを使用しても実行計画が変わることはないようです。
ただし、LEFT JOIN, RIGHT JOINを使用した場合は強制的にコストベースになるので注意が必要です。
また、FROM句でA, Bの順に記述されていますが、A.項目2 = '01'の条件で絞り込んでも、まだ
Aの件数 > Bの件数が成り立つのでしょうか?
もし、これで逆転するようなら、A.項目2にインデックスを作成し、FROM句をB, Aとした方が性能がよくなるように思われます。
ちなみに、ご存知かも知れませんが、ルールベースがサポートされているのは9iまでで、10gからは完全に廃止されています。
No.2
- 回答日時:
オプティマイザは、マイナーバージョンでも変更されると聞きますし、
COMPATIBLE 初期パラメータでも、変動します。
どちらが高速かは、わかりませんが。
(+)演算子の未来も暗そうなので、WHEREで結合条件を書くのは控えて
INNER JOIN で書いていった方が将来明るいと思います。
どうしても調べたいならば、TRACEすれば個別のケースでは優劣は付くかもしれませんが
それで、100%の正解にはならないと思います。
あと、#2さんの指摘に加えて、
どのようなパターンだとしても(複合でも単独でも)、インデックスが冗長のように見えます。
No.1
- 回答日時:
説明に出てくる”PRIMARY KEY1”、”PRIMARY KEY2”の意味がわかりません。
複数項目で設定したプライマリキーの第一項目、第二項目の意味でしょうか?
INDEX1,INDEX2も不明ですが..
【WHERE句にて結合】と【INNER JOINにて結合】の違いは、
従来型の記述か、ANSI構文かの違いなので、
それによる速度差は無いのではないかと思いますが、
実行計画を見ないと確かなことは言えません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
WHERE句の実行順序
-
likeとsubstrの使いわけについて
-
実行計画HASH JOIN RIGHT OUTER
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
Statement ignored というエラー
-
ODBCリンクの際にACCESSでは読...
-
【Excel VBA】 WorksheetやRa...
-
エクセル 日付による並べ替え...
-
Accessのマクロでモジュールを...
-
SQL文のエラー
-
SQL*Loader フォーマット変換...
-
全角空白のTRIMができない...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
sqlplusでヘッダーが付かない
-
VBA プロシージャの名前の取得
-
ストアドプロシジャからストア...
-
SQLサーバで和暦から西暦に変換...
-
excel/vba/public変数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
WHERE句の実行順序
-
likeとsubstrの使いわけについて
-
問題解決のストーリーにて PDCA...
-
ヒント句が無効になります
-
実行計画HASH JOIN RIGHT OUTER
-
SQL ORDER BYにおける条件について
-
Like文の速度について教えてく...
-
アナライズでほとんどの処理が...
-
あいまい検索のパフォーマンス...
-
ORACLEでwhere句の検索順序
-
JOINの時のONとWHEREの違いにつ...
-
oracleのanalyzeと処理時間につ...
-
WHERE句はJOIN結合前結合後どち...
-
PDCAを回すって?
-
【チューニング】インデックス...
-
計画段階での怠惰
-
DATE型カラムのインデックスが...
-
外部結合と等価結合のパフォー...
-
表の結合(性能)
おすすめ情報