Oracle12c前提での質問です。
WhereIN句に記載する値の順番はヒットしやすいものから順番に記載した方がパフォーマンスが良いという話を耳にしました。
果たしてこの話は本当なのでしょうか。
あくまで一例として、テーブルのある列の値が、
A:1件
B:10億件
C:5万件
とあった場合に、
IN('A','B','C')
ではなく、
IN('B','C','A')
と書いた方がいいということになります。
※投稿時に記載した件数が少なかったので件数を直しました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
Where IN句に記載する値の順番はヒットしやすいものから順番に記載した方がパフォーマンスが良いという話を耳にしました。
in だけではなくexistsも同じですね。
見つかったらそこで終わりですから、検索して早い段階で見つかれば、当然早くなります。
テーブルのある列の値が、
A:1件
B:10億件
C:5万件
とあった場合に、IN('A','B','C')
ではなく、IN('B','C','A')
と書いた方がいいということになります。
なぜでしょう。検索されるデータの並びがBからというなら成り立ちますが、そういった前提ではないですよね。
母体が大きければ、条件が含まれる可能性が大きいというだけです。
データの先頭にAがある場合に、Bから検索すると、Aから検索するより遅くなります。
インデックスを設定するようなケースを想定すると、ソートされる順序で並べておく方が無難だと思いますよ。
投稿2019/10/07 06:22
編集2019/10/07 06:25総合スコア25327
0
ベストアンサー
レコード件数が少ないから、実行時間の違いは微々たるものだと思いますが、DBMS_STATS.GATHER_TABLE_STATSで統計情報を取得 し、実行計画 の違いを確認。
それぞれのSQLをPL/SQL など LOOPが使える言語で1万回実行して処理時間を比較してみては?
投稿2019/10/07 03:44
総合スコア16417
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/07 04:19
2019/10/07 05:09
2019/10/07 09:51
2019/10/07 10:00
2019/10/07 10:19
2019/10/07 10:21
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/07 08:28
2019/10/07 10:14
2019/10/07 10:19
2019/10/07 10:19