テーブル1のレコードがテーブル2にあるかどうか、および別のテーブルへのリンクがまだ存在するかどうか、基本的に2つのことを行うビューを作成しようとしています。それはデータのサブセットで動作しましたが、完全なクエリを実行しようとすると、ビューデザイナでタイムアウトになりました。SQLビューの最適化
別のテーブルへのリンクが存在するかどうかを確認するために、チェックを追加するまでビューが正常に機能しました。
当初は表Bに、表Aに参加しA.IDがテーブルBにID列に
を本波平ここで、Iは、次いで人物とアドレステーブル(の間のリンクは、に格納されている場合と言われた濾別テーブルC)が削除された場合、そのテーブルを完全に抽出して、リンクが存在しなくなったことを知る方法以外の方法はありません。
Column1 = case when exists (select LinkID from LinkTable C
where cast(C.LinkAddressID as varchar) = A.AddressID
and cast(C.LinkID as varchar) = A.ID)
then Column1
else NULL
end
があります:私は、私は列に情報を表示するかどうかを選択するために60倍に近い次の構造を使用しています
特定の列にいくつかのデータを表示するかどうかを判断するためにそのチェックを使用しようとしています表Aの約1.6mレコードは、リンクテーブルの4mレコードをわずかに上回っています。
この最適化されたクエリ/ビューを作成するより良い方法はありますか?
より多くの情報が両方の条件が満たされない場合、一致は二つの条件とNULLに存在する場合、これはあなたにC.LinkIDを与える
varcharデータ型を定義するときは、常にサイズを指定する必要があります。それ以上の詳細がなければ、何が起こっているのか分かりにくいですが、LinkTableへの左への結合が良いと思われます。あなたが本当に助けることができる前に、もっと多くの情報を提供する必要があります。クエリの小さな部分だけでは、パフォーマンスを向上させるのに十分ではありません。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
実際の実行計画とクエリを入力してください – Devart
また、クエリはSARGABLEではありませんが、スキャンを終了する可能性があります – TheGameiswar