筛选索引是否有助于改进基于输入时间的查询,还是应该避免这种情况?

Bet*_*zel 6 index sql-server-2008 database-design

我只是在了解 MS SQL 2008 中新的过滤索引,我试图了解它们会在哪些方面造成伤害以及它们会在哪些方面有所帮助。

我可以看到向员工表添加过滤索引以仅索引当前员工将是一个好主意。

但是根据时间将几个过滤索引应用到一个大表呢?例如,假设我有一个表,它有一个 enterOn 日期/时间字段,并且该表有很多年的数据。如果查询通常是基于日期和其他一些字段(例如 enterby )完成的,那么是否有一些过滤索引具有将索引限制到时间跨度的 where 子句?在我的示例中,查询类似于

select enteredOn, Description, ...
from myTable
where enteredOn > '2011/01/01' and enteredBy = "My, User"
Run Code Online (Sandbox Code Playgroud)

每年都有一个过滤索引是合理的,还是在查询以下内容时会导致很多问题?

select enteredOn, Description, ...
from myTable
where enteredOn > '2009/06/01' and eneteredOn < '2010/06/01' and enteredBy = "My, User"
Run Code Online (Sandbox Code Playgroud)

SQL*_*tar 4

比特关闭,

这取决于几个因素,没有适用于每种情况的唯一答案。例如,您可能希望将一些旧数据分区并归档到一组专用磁盘上,因为它们不经常访问。我怀疑您会考虑将这样的分区交换为过滤索引。我怀疑您想要为特定列中的所有 NULL 值创建分区,而不是使用过滤索引。

您应该阅读 Kimberley Tripp 的分区白皮书(位于http://msdn.microsoft.com/en-us/library/ms345146%28v=sql.90%29.aspx),以及位于http:// technet.microsoft.com/en-us/library/cc280372.aspx

这两个链接应该可以帮助您指明正确的方向,了解您需要考虑的所有设计注意事项。