人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ORACLE 11のJOINについて質問です。
SQLの記述方法としては、下記の2パターンあるかと思います。
【パターン?】
SELECT VALUE1,VALUE2 FOM
TABLE_A A,TABLE_B B
WHERE A.colum = B.colum
【パターン?】
SELECT VALUE1,VALUE2 FOM
TABLE_A A
INNER JOIN TABLE_B B
ON A.colum = B.colum

上記2つのSQLの実行計画を取得したところ、パターン?のSQLに比べパターン?のSQLの方がコスト、実行速度共に優れていました(速度に関しては5倍程度の差がありました)。
無風状態、同一条件、同一取得カラム、実行前にキャッシュをクリア済みという条件で測定したため、性能差はORACLE内部のロジックの違いによるものではないかと思っております。

もし私の仮説が正しいのであれば、どのような違いがあるのかご教示頂きたいです。
性能差が発生するような違いはないという意見でも構いませんので、ご意見頂きたいです。



●質問者: renpougun
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
ベストアンサー

【パターン1】全結合
Aが10件、Bが50件だどすれば、
Aを1件読み込むたびに、Bの全てのレコード(50件)と結びつけて、
A.colum = B.columであるかどうかを確認する手間が発生します

【パターン2】内部結合
Aが10件、Bが50件だどすれば、
Aを1件読み込むたびに、B上の相当するレコードを探しにいきます
B.columにインデックスがついていれば、
50件すべてを見に行かなくてすむので飛躍的に早くなることがあります

ただし、
組み合わせが複雑になってくると、全結合のほうが早くなる場合もありますので、
システム開発においては、実データと同じような質よ量の実験用データを用いて、
検証テストを行うのが常となっています

システム開発ではなく、一時的に大量のデータをさばく場合には、
EXPLAINでテストしたりする手間をかけるのではなく、両方書いて、
オプティマイザに自動的に選ばせるという手を使うと良いでしょう
SELECT VALUE1,VALUE2
FROM TABLE_A A INNER JOIN TABLE_B B ON A.colum = B.colum
WHERE A.colum = B.colum

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ