我想在SQL中查询大型数据集 - 这是正确的方法吗?
declare @datetime Datetime
select *
from sales
where salesdate <= @datetme
或:
select *
from sales
where salesdate < (select GetDate())
或:
select *
from sales
where salesdate < GetDate()
或使用NOW()
答案 0 :(得分:6)
除查询号中的变量的0%ASSIGN阶段外,所有三个都将具有相同的执行计划。但是从长远来看,总是将变量初始化为DATETIME然后用于比较,这将是一个很好的做法。当您进行长时间的比较时,用户将习惯在变量中格式化日期时间并将列与这些变量进行比较。否则,它成为格式化SQL列的习惯,然后将其与日期一起进行映射。这会格式化每个数据行中的datetime字段以与值进行比较,并使日期时间比较变慢。
对于此特定查询,为了便于阅读和使用,您可以选择查询号。 3 [从销售中选择*来自salesdate&lt; GETDATE()]。
答案 1 :(得分:1)
Select * from sales where salesdate < GetDate()
似乎是最合乎逻辑的做法,它的SQL少于Select * from sales where salesdate < ( Select GetDate())
,如果你只运行一次性查询,如果你只运行一次性查询,那么声明变量就没什么意义了。你将要使用它或在存储过程中使用,然后添加变量是有意义的。
但请查看执行计划并查看哪些执行效果最佳