SQL:查询大表

时间:2017-09-05 14:40:31

标签: sql sql-server query-performance

我想在SQL中查询大型数据集 - 这是正确的方法吗?

declare @datetime Datetime

select * 
from sales 
where salesdate <= @datetme

或:

select * 
from sales 
where salesdate < (select GetDate())

或:

select * 
from sales 
where salesdate < GetDate()

或使用NOW()

2 个答案:

答案 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()),如果你只运行一次性查询,如果你只运行一次性查询,那么声明变量就没什么意义了。你将要使用它或在存储过程中使用,然后添加变量是有意义的。

但请查看执行计划并查看哪些执行效果最佳