【发布时间】:2016-10-09 00:59:04
【问题描述】:
在参加了高级 T-SQL 性能/查询调优课程后,我记得我听过的一句话是,如果您将日期(时间)过滤器放在首位,您可以稍微加快一些查询。
例如:
WHERE
RunDate = '12/1/2015' AND
OtherFilters = etc...
但这真的只有在我为该表过滤的这些列上设置了索引时才算数吗?
所以要补充一点,我是否应该根据查询中引用的任何表的索引构建过滤器?这样我的第一个查询过滤器就基于我的索引?
例如:
WHERE
ID > 1000 AND
RunDate <= '1/1/206' AND
OtherFilters = etc...
ID 和 RunDate 是我的索引/主键的一部分。
【问题讨论】:
-
希望你记错了,而不是有人真正教过。
-
额外作业:继续学习covering index。请注意,SQL Server 2005 及更高版本支持included columns 以及复合索引。
-
如果您对其他研究感兴趣,这里有几个相关主题。一旦数据库引擎构建了一个查询计划来执行一个查询,它可能会缓存它以便快速重用。 计划缓存可能会成为一件坏事。如果查询包含参数,则缓存计划可能会受到参数嗅探的影响,导致它对于不同的参数值远非最优。类似地,索引统计往往会随着时间而改变,缓存计划可能会变得低效。架构更改,例如如果不更新查询计划,添加索引可能不会带来好处。等等。 Ref.
标签: performance tsql sql-tuning