我可以使用过滤索引来查询“最近修改的”行

问题描述 投票:4回答:1

我正在使用SQL Server 2008-R2,但我也对更通用的答案感兴趣...

我有一个包含数亿行的表,每个表都有一个“ DateModified”字段(datetime2(7))

现在,我经常使用类似查询的查询来轮询该表>

select * from table where DateModified > @P1 

这里参数始终是最新的(例如最近几分钟之内),并且可能只有少数记录与该值匹配。

我想到我将在整个表上维护一个大索引,这时我将永远不会对许多这些值使用索引...因此,这听起来像是对筛选索引的完美使用,其中我仅对行进行索引我可能会查询...

但是在这种情况下,过滤器会是什么样?我唯一的想法是在[]上进行过滤

where DateModified > [yesterday]

其中[yesterday]是日期文字,但随后我必须定期重新定义过滤器,否则过滤器的优势会随着时间的流逝而消失。

一时兴起,我尝试了ModifiedDate > DATEADD(d,-1,GETDATE()),但是这给出了一个无法描述的错误……不确定如何实现。

还有其他方法可以做到这一点吗?

然后,最后,如果有办法,我应该期望统计信息在我的情况下是完全错误的,这会影响我的查询性能吗?

我对统计数据的关注来自this article

我正在尝试使用一些断开连接的数据将更改从一个系统传播到另一个系统...如果您想提出一种完全替代的方法来轮询“ DateModified”,我很乐意考虑。

我正在使用SQL Server 2008-R2,但是我也对一个更通用的答案感兴趣……我有一个包含数亿行的表,每个行都有一个“ DateModified”字段(datetime2(7))现在我非常...

sql sql-server sql-server-2008-r2 indexing filtered-index
1个回答
6
投票

不久前有类似的要求,发现过滤器中不允许使用功能。

您可以做的是,编制脚本索引并将其安排在非高峰时间(可能是每晚)在作业中运行。这也将解决统计问题,因为每次创建索引时都会重新创建它们。

© www.soinside.com 2019 - 2024. All rights reserved.