是否可以在 DateTime
部分(例如 DATEPART(YEAR, bp.[CreatedOn])
和 DATEPART(MONTH, bp.[CreatedOn])
)上设置索引?例如,我有以下 T-SQL 查询:
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
目前,记录并不多,因此就性能而言,这不是一个大问题,但记录会随着时间的推移而增长。
最佳答案
您最好使用日期时间字段构建标准:
declare @startMonth datetime = '20120801'
SELECT bp.Title, bp.CreatedOn
FROM BlogPosts bp
WHERE bp.[CreatedOn] >= @startMonth
AND bp.[CreatedOn] < dateadd (month, 1, @startMonth)
ORDER BY bp.CreatedOn;
这样查询执行器将能够在 CreatedOn 上使用索引。
关于sql-server - 日期时间部分的 SQL Server 索引,例如 YEAR、MONTH,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12214029/