如何优化SQL Server查询的where子句

时间:2018-04-25 05:41:40

标签: sql-server sql-server-2008 sql-server-2016

员工

ID Name DOJ
------------------
1   A   2018-12-12
2   B   2018-11-12
......

查询:

SELECT NAME 
FROM Employee 
WHERE YEAR(DOJ) = 2018

employee表中有大量数据,如何优化?

4 个答案:

答案 0 :(得分:4)

您可以避免where子句中的函数

SELECT NAME 
FROM Employee e
WHERE DOJ >= '20180101' and DOJ <= '20181231';

因此,该查询将被称为 SARGable ,如果已存在则可以利用索引

对于当前查询,使用where子句中的任何函数来进行查询 non-sargable 。因此, SQL 优化器无法在DOJ上使用索引,即使存在索引。

微小的建议总是使用ANSI SQL 日期格式YYYYMMDD

答案 1 :(得分:2)

不要直接在表格列DOJ上应用任何功能。而是使用它 -

SELECT NAME FROM Employee WHERE DOJ >= '2018-01-01' AND DOJ <= '2018-12-31'

另外,请确保列Index上有DOJ。 看看这个 - Sargable Query

答案 2 :(得分:0)

要加快查询速度,您可以在INDEX字段上创建DOJ

CREATE INDEX idx_doj ON Employee (DOJ);

答案 3 :(得分:0)

您可以在DOJ列中添加索引或在年份上对表进行分区,因为您说的是一个巨大的表