- - PR -
UNION前の結合とUNION後の結合について
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-26 11:01
こんにちはWataです。
こちらの会議室には初めての投稿になります。 ある二つのテーブルA, BをUNION ALLでマージした表から サブクエリと結合して条件に当てはまるレコードを抽出したい場合、 次の2通りの方法でパフォーマンス的な違いは発生するものでしょうか?
なお、実際にUnionするテーブルの数は4つで、 結構大きなサイズになる見込みです。 自分の考えとしては 1の方法だとサブクエリの評価が2度行なわれそな気がするのと、 SQL文が2の方法よりも巨大化してしまうのが嫌な感じで、 2の方法だとUNION後の巨大なテーブルと結合を行なうので その影響が心配です。 (組み合わせの総数は変らないけど...) ■環境 Oracle8i Solaris8 JDBCでアクセス | ||||||||
|
投稿日時: 2005-04-26 11:16
今日は。
SQL Analyseにかけてみてはどうでしょう? _________________ Inspired Ambitious ISMS Assistant Auditor | ||||||||
|
投稿日時: 2005-04-26 11:30
Oracle8iには詳しくないですが・・・ A.a = C.aや B.a = C.aでどれぐらいのレコードが絞れるかによって性能差が出ると思います。 クエリが重複しているとかのプリペアで性能差がはっきり出たという経験は 私にはないですね。 やはり、ディスクアクセスとメモリ使用量で性能に差が出たことが多いです。 #---投稿後、不要引用削除+文追加 [ メッセージ編集済み 編集者: 夏椰(かや) 編集日時 2005-04-26 11:47 ] | ||||||||
|
投稿日時: 2005-04-26 12:38
素早い回答ありがとうございます。
やはり、先に間引いといた方がよさそうですね。
こちらも試して見たいと思います。 (と言いつつSQL Analyseって何?とぐぐってる際中) | ||||||||
|
投稿日時: 2005-04-26 12:41
まず、Oracleであれば、plan_tableを作成してexplain planを実行し、実行計画を取得してみてください。
また、検索速度についてはルールベースかコストベースかや、統計情報を取得しているか否かによっても異なるため、一概にどちらがよいとは言えませんが、ルールベースのアプローチを取られている場合、前者の方が圧倒的に有利になる可能性があるでしょう。 ところで、1のSQLはカッコ内の内容+ORDER BY句だけでも同じ結果になったように思うのですが。 | ||||||||
1
