業務で使用しているSQLの性能改善を行っています。
あるSQLの中で、あらかじめ一時テーブルに格納してあった値をWHERE句で使用するような記述があります。以下のようなイメージです。
SQL
1SELECT 2 A.HOGE 3FROM 4 A_TBL A 5 , TMP_TBL TMP 6WHERE 7 A.HOGEHOGE = TMP.HOGEHOGE // 'HOGE1'等が入っています
前提として、上記で使用するTMP_TBLには、6種類程のマスタ情報の中から任意で選択したものがSELECT文の発行直前にINSERTされます。
今のところTMP_TBLのレコード数は最大6件で、TMP.HOGEHOGEの中身についてもそれぞれ固定値になる想定です。
このように一時テーブルを利用するメリットが今のところ分かっておりません。
以下のようにIN句を用いても同じ結果が得られることは検証済みです。
また、実行計画のコストを参照したところ下記の記述の方が性能も良さそうです。
SQL
1SELECT 2 A.HOGE 3FROM 4 A_TBL A 5WHERE 6 A.HOGEHOGE IN ('HOGE1', 'HOGE2' ...)
調べたところIN句内でサブクエリを使用しない限りは速度が遅くなるようなこともないので、これで問題ないような気がするのですが、なにかIN句を使わない方が良い理由 or 一時テーブルを使った方が良い理由があるのでしょうか?
それぞれの特徴についても触れながら、ご教示いただけたら有り難いです。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/27 03:57
2018/06/27 05:38