【发布时间】:2011-08-21 20:07:45
【问题描述】:
类似于 SQLServer,我可以在其中执行以下操作
create index TimeSeriesPeriodSs1 on TimeSeriesPeriod (validationStatus, completionStatus)
where completionStatus= N'Complete'
and validationStatus= N'Pending'
【问题讨论】:
-
您不会创建一个普通索引并将 where 子句放在您的 select SQL 中吗?这样,您的普通索引将为另一个 select stmt 提供不同的 where 子句表达式命中相同的字段。虽然不熟悉 SQL Server 过滤索引,所以不清楚它的好处。
-
@tbone - 尺寸可能是一个原因
-
@tbone:过滤索引的重点是避免在只需要一小部分索引时在大表上维护索引的开销。
-
Oracle 不需要“维护”整个索引吗?如果我们谈论的是 Oracle,而基于函数的索引就是这个问题的答案,那么向前移动的任何和所有修改的行都不需要应用该函数(即使结果为 null 并且没有存储,仍然所有 DML 都需要应用功能检查)。所以读取速度可能会快一点,但 DML 可能会慢一点,不是吗?对于这种开销(以及非正统的方法 imo),您真正获得了什么?只是索引的大小?不要试图变得困难(好吧,也许有点;),但很好奇
-
@Tbone 读取速度会快很多。例如,您有数百万或已处理的行,以及非常少的未处理的行。如果要查找下一个要处理的行,则不需要包含所有这些行的索引。
标签: sql-server oracle filtered-index