【问题标题】:SQL Server : are there any side effects to using a filtered index?SQL Server:使用过滤索引有什么副作用吗?
【发布时间】:2016-12-02 11:49:02
【问题描述】:

使用过滤索引时是否有任何继承副作用?例如。如果插入一百万行,与具有未过滤的相同索引相比,索引处理等需要更长的时间吗?

【问题讨论】:

  • 什么相比有什么劣势?如果您不使用过滤索引,您还会使用什么效果更好/更差(以及在哪些场景下),以便可以比较优缺点?
  • 很多问题最终归结为一个词:“取决于”。环境的多样性和不同的情况使得这几乎不可能准确回答。获得这个答案的方法是获得一个开发环境并测试这两个选项并比较性能。
  • @Damien_The_Unbeliever 我的意思是“副作用”而不是劣势。更新了标题。
  • @RichBenner 这可能取决于什么类型的环境因素?
  • 这不是一个好问题,但我会分享这个作为思考的食物。 sqlperformance.com/2014/06/sql-plan/filtered-index-side-effect

标签: sql sql-server indexing


【解决方案1】:

总有一个门槛。
让我们看看边缘案例 -

  • 如果所有记录都通过过滤器,那么我们就白白浪费了 CPU。
  • 如果没有记录通过过滤器,那么我们会投入一些 CPU 过滤掉记录,但我们会为所有未执行的插入节省 CPU、IO 和内存。

你的情况介于两者之间。

【讨论】:

  • 谢谢。您能否详细说明“如果没有一条记录通过过滤器,那么我们在过滤时投入了一些 CPU,但我们为所有未执行的插入节省了 CPU、IO 和内存。”
  • 假设我们有一个条件为 x>999 的过滤索引,并且我们正在向表中插入 1M 条记录,但所有 x 值都小于 999。为了检查每条记录是否为 x> 999我们要投入一些CPU。然而,由于没有记录通过过滤器而不是我们没有向索引结构插入任何新数据,因此我们不需要投入更多资源,而不是此时需要一些工作的非过滤索引。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多