是否有可能在DateTime
零件上有索引,如DATEPART(YEAR, bp.[CreatedOn])
和DATEPART(MONTH, bp.[CreatedOn])
?例如,我有以下的T-SQL查询:日期时间零件的SQL Server索引,如YEAR,MONTH
DECLARE @year AS INT = 2012;
DECLARE @month AS INT = 8;
SELECT bp.Title, bp.CreatedOn FROM BlogPosts bp
WHERE (DATEPART(YEAR, bp.[CreatedOn]) = @year) AND (DATEPART(MONTH, bp.[CreatedOn]) = @month)
ORDER BY bp.CreatedOn;
这是执行计划,我有:https://gist.github.com/3551450
目前,不会有太多的记录,所以它不是一个大问题来讲perf,但是记录会随着时间而增长。
嗯,好主意!谢谢。那么,在DateTime部件上创建索引是不可能的? – tugberk
@tugberk它可能会,如果你使用持久化计算列和索引它。 –
-1。这必须在所有记录上运行'dateadd',因此必须加载所有记录(FULL TABLE SCAN) - 性能非常差。我敢打赌你会在执行计划中看到这一点。 – Aliostad