sql-server - 日期时间部分的 SQL Server 索引,例如 YEAR、MONTH

标签 sql-server sql-server-2008 tsql indexing

是否可以在 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/

相关文章:

sql-server-2008 - SQL Server LEFT JOIN 无法匹配没有 JOIN 提示的行

sql-server - 从表变量更新表

sql - 在 View 中将数据类型 nvarchar 转换为数字时出错

sql-server - 我应该使用 SQL Server 触发器来迁移数据库吗?

sql - 在 SQL Server 中获取日期之间的日期的正确方法

sql-server - SQL Server : Can the same table exist in multiple schemas

sql - 带上限的运行总计

sql-server - mdx 层次结构 XXX 已出现在 axis0 轴中

sql-server-2008 - DateDiff年转换为小数

sql-server - 数据集的 SSRS 查询执行失败