Table1
有列
Id int, Date smalldatetime.
View1
在许多其他列中,有 column Id int
。
View1
的最大值为2000 rows
,但有一些相当复杂的计算来确定所有列的值。
返回所有Table1.Id
不在介于and之间的最有效方法View1.Id
是什么?Table1.Date
'2012-05-30'
'2012-05-31'
过滤后的选择Table1
通常返回约200 unique
Table1.Id.
当我执行 SELECT * FROM View1 时,总数据总是在一秒钟内返回。当我从 Table1 WHERE Date BETWEEN '2012-05-30' AND '2012-05-31' 中执行 SELECT Id 时,结果总是即时的。
当我尝试 SELECT Table1.Id from Table1 T1 WHERE Date BETWEEN .. AND .. AND NOT EXISTS (SELECT Id from View1 WHERE ViewId=T1.Id) 时,它需要很长时间(几乎 20 秒)。
我也尝试使用 CTE,将 V1 用作(从 View1 中选择 ID)从表 1 T1 中选择 T1.Id,其中日期在 ... 和...之间并且不存在(从 V1 中选择 Id,其中 V1.Id=T1.Id) ,而且也需要很长时间。
谢谢。