15個以上のテーブルを結合し、30個のカラムを結合する複雑なSQLクエリがあります。 ソーステーブルに更新日の列があることがわかっています。複雑なSQLクエリからデルタを取得
更新された/挿入されたすべての情報のデルタをそのクエリから取得するにはどうすればよいですか?
15個の条件一般的に節がパフォーマンスにも便利でもない
15個以上のテーブルを結合し、30個のカラムを結合する複雑なSQLクエリがあります。 ソーステーブルに更新日の列があることがわかっています。複雑なSQLクエリからデルタを取得
更新された/挿入されたすべての情報のデルタをそのクエリから取得するにはどうすればよいですか?
15個の条件一般的に節がパフォーマンスにも便利でもない
で(DateDiff(d,T1.Update_Date,getdate()) <= @delta OR DateDiff(d,T2.Update_Date,getdate()) <= @delta OR .....)
を追加、あなたは今where
句で列に関数を使用したいです。これにより、オプティマイザが機能するのがより困難になります。
の代わりに:(これは、SQL Serverの構文であり、考え方は同じですが、他のdatabsesで異なる構文です)
t1.Update_date <= dateadd(day, - @delta, getdate())
:
DateDiff(T1.Update_Date, getdate()) <= @delta
あなたのような何かをしたいです。
各テーブルの列をチェックする場合は、列を一覧表示する必要があります。 OR
で条件を接続しているため、これはパフォーマンスにあまり影響しません。
ありがとうございました@ Gordon Linoff私はそれを試しました、それはクエリを遅くするOR条件です。 where句に条件が1つだけあれば、うまく動作します。 UNION ALLを使用して15の問合せに分割するとどうなりますか? – OussamaK
@OussamaK。 。 。サブクエリがインデックスをうまく利用できる場合、 'union all'は' or'よりはるかに高速です。 –
使用しているデータベースで質問にタグを付けてください。あなたの構文はMySQLとSQL Serverのハイブリッドなので、どのデータベースが実際に使用されているのかはわかりません。 –