![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Oracle10gでのSQL文の違いについて教えて下さい。
前回の質問は、ストアドプロシージャに記述
されていて、バッチとして動かしています。
と書きましたが、ビューの場合のパフォーマンスの違いは
どうなるのでしょうか?ビューの場合も同じような現象です。
下記の2つのSQL文は外部結合ありと外部結合なしの違いだけで、
他は変わりありません。
外部結合ありのほうは
結果がすぐに返されるのですが、外部結合なしのほうは
結果が返ってこない、あるいはかなり時間がかかるという
現象が起きています。
SQL文は簡略して記述していますが、SELECT句には、
TO_CHAR()やSUM(CASE WHEN ...THEN ...ELSE...)が使用してあり
少し重くなる処理も含まれています。
この2つのSQL文でパフォーマンスに影響している原因は
何なんでしょうか?オプティマイザとか実行計画とかの
説明を読んだのですが、いまいちよく解りません。。
自分では中級者以下だと思っていますので、わかりやすく
説明して頂けたら助かります。宜しくお願い致します。
(外部結合ありのSQL)
SELECT
a.項目1,
a.項目2,
a.項目3,
a.項目4,
a.項目5
FROM
TBL_A a,
TBL_B b
WHERE
a.項目1 = b.項目1(+) AND
a.項目2 = b.項目2(+) AND
a.項目3 = b.項目3(+) AND
a.項目4 = b.項目4(+) AND
GROUP BY
a.項目1,
a.項目2,
a.項目3,
a.項目4,
a.項目5
(外部結合なしのSQL)
SELECT
a.項目1,
a.項目2,
a.項目3,
a.項目4,
a.項目5
FROM
TBL_A a,
TBL_B b
WHERE
a.項目1 = b.項目1 AND
a.項目2 = b.項目2 AND
a.項目3 = b.項目3 AND
a.項目4 = b.項目4 AND
GROUP BY
a.項目1,
a.項目2,
a.項目3,
a.項目4,
a.項目5
No.1ベストアンサー
- 回答日時:
オラクルのオプティマイザは、テーブルの検索の方法を決めますが、外部結合と内部結合で
立案される実行計画に違いがあり、内部結合の方が合理的な検索方法を立案しているので
結果的に、内部結合の方が速いという話なんですが・・
実行計画を見なければ、判りませんが、
・外部結合はbに対して全表検索を選択した。
・内部結合では、bを索引検索を選択した。
・bの検索量が、bの格納件数のうち、ごく一部なので、全表検索と索引検索では、極端に検索時間が違う。
ということなんだと思います。(推測なので、実は違うかも知れません)
オラクルのマニュアルで、パフォーマンスチューニングガイドというマニュアルがあると思うので、
一読されることをお勧めします。
ちなみに、お書きになったSQLは何か変です。
内部結合のSQLは、bの項目を返さないので、実質的にbに存在するかのチェックを行っているに等しいものです。
書き方や流儀の問題で、内部結合が良いのか、exists条件が良いのか、in条件(メンバーシップ検査)が良いのか
変わってくると思いますが、一応理解できるものです。
しかし、外部結合のSQLについては、bを検索するけど、何もしない??理解に苦しむSQLになっています。
基本的に、内部結合より遅くなる外部結合を、わざわざ書いてみた、というように感じます。
(一般論ですが、同じ書き方をしたら、外部結合は内部結合と同等以下です)
この回答への補足
ご回答ありがとうございます。
>ちなみに、お書きになったSQLは何か変です。
>内部結合のSQLは、bの項目を返さないので、実質的にbに存在する>かのチェックを行っているに等しいものです。
このSQL文は簡略しすぎました、bのテーブルからも項目をSELECTしています、すみませんでした。。
その点を踏まえても同じようなご回答になっていましたでしょうか?
また、ビューでもストアドプロシージャでも同じようなパフォーマンスになるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- 運転免許・教習所 普通車AT限定で免許を取りに教習所に行っています。 今回技能講習6時間目だったのですが、今までは1回 2 2022/11/03 17:50
- iPad iPadのコントローラーってありませんでしょうか? 1 2023/02/27 20:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Like文の速度について教えてく...
-
likeとsubstrの使いわけについて
-
ヒント句が無効になります
-
キャッシュを使わずにSELECTを...
-
SQL ORDER BYにおける条件について
-
WHERE句の実行順序
-
実行計画HASH JOIN RIGHT OUTER
-
外部結合と等価結合のパフォー...
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
Statement ignored というエラー
-
VBA プロシージャの名前の取得
-
sqlplusのspoolで空白行出現
-
今日の日付が入った行のデータ...
-
sqlplusでヘッダーが付かない
-
エクセルVBAでUserFormを起動し...
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
ストアド実行時のエラー「参照...
-
全角空白のTRIMができない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
likeとsubstrの使いわけについて
-
キャッシュを使わずにSELECTを...
-
WHERE句の実行順序
-
Like文の速度について教えてく...
-
WHERE句はJOIN結合前結合後どち...
-
ヒント句が無効になります
-
あいまい検索のパフォーマンス...
-
アナライズでほとんどの処理が...
-
問題解決のストーリーにて PDCA...
-
oracleのanalyzeと処理時間につ...
-
DATE型カラムのインデックスが...
-
JOINの時のONとWHEREの違いにつ...
-
SQL ORDER BYにおける条件について
-
【チューニング】インデックス...
-
INDEX作成による更新系の影響範囲
-
Analyzeとは?
-
Oracleで検索すると、フリーズ...
-
Selectの処理速度改善について
-
PDCAを回すって?
-
前方一致で索引(インデックス...
おすすめ情報