表员工
ID Name DOJ
------------------
1 A 2018-12-12
2 B 2018-11-12
......
查询:
SELECT NAME
FROM Employee
WHERE YEAR(DOJ) = 2018
在employee
表中有大量数据,如何优化?
答案 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列中添加索引或在年份上对表进行分区,因为您说的是一个巨大的表