Table1列があります
Id int, Date smalldatetime.
View1他の多くの列の中で、列がありますId int。
View1の最大2000 rows値はですが、すべての列の値を決定するためのかなり複雑な計算がいくつかあります。
との間にTable1.Idないものをすべて返すための最も効率的な方法は何ですか?View1.IdTable1.Date'2012-05-30''2012-05-31'
からのフィルタリングされた選択は、Table1通常、約200 unique Table1.Id.
SELECT * FROM View1を実行すると、合計データは常に1秒未満で返されます。Table1 WHERE Date BETWEEN '2012-05-30'と'2012-05-31'からSELECTIdを実行すると、結果は常に瞬時になります。
Table1からSELECTTable1.Idを試した瞬間T1WHEREDate BETWEEN .. AND .. AND NOT EXISTS(SELECT Id from View1 WHERE ViewId = T1.Id)、時間がかかります(ほぼ20秒)。
CTEも使用してみましたが、V1を(View1からのSELECT Id)としてSELECT T1.Id FROM Table1 T1 WHERE Date BETWEEN ... and ... AND NOT EXISTS(SELECT Id from V1 WHERE V1.Id = T1.Id) 、そしてそれも何年もかかりました。
ありがとう。