select *
from table1 t1
where
t1.somedate between UDF(date1) and UDF(date2)
UDF:用户定义的函数
此UDF(date1)
和UDF(date2)
将针对t1
的每一行进行评估。
这会降低性能。
第二个选项我试过
declare @a datetime, @b datetime
set @a=UDF(date1)
set @b=UDF(date2)
select *
from table1 t1
where
t1.somedate between @a and @b
即使这需要很长时间。
可能是什么原因,可能是什么工作。
如果我写
select *
from table1 t1
where
t1.somedate between date1 and date2
它非常快。大约需要3秒。上述查询需要2-3分钟。
答案 0 :(得分:1)
首先,我认为使用变量而不是UDF不会让你在性能上有所提升,因为udf应该是确定性的。所以它只会被计算一次。
其次,你在somedate字段上有索引吗?如果你不这样做,就放一个。如果有,您可以检查您获得了多少数据以及是否存在网络问题。
您应该检查以查看查询计划,它会更好地向您显示正在进行的操作。