Kah*_*ahn 10 index sql-server filtered-index
我们的项目运行着一个非常大、非常复杂的数据库。所以大约一个月前,我们注意到包含空值的索引列使用的空间变得太大。作为对此的回应,我编写了一个脚本,该脚本将动态搜索包含超过 1% 的空值的所有单列索引,然后在该值不为空的情况下删除并重新创建这些索引作为过滤索引。这将删除并重新创建整个数据库中的数百个索引,通常会释放整个数据库使用的近 15% 的空间。
现在我有两个问题:
A) 以这种方式使用过滤索引的缺点是什么?我认为它只会提高性能,但是否涉及任何性能风险?
B) 我们在删除和重新创建索引时收到错误(“不能删除索引 XYZ,因为它不存在或您没有权限”),即使在事后检查时,一切都完全按预期进行。这怎么会发生?
谢谢你的帮助!
编辑:回应@Thomas Kejser
嗨,谢谢,但事实证明这是一场灾难。当时我们不明白一些事情,例如:
最终,这些更改被还原。因此过滤索引是一个强大的工具,但您需要真正了解从这些列中提取的数据。除了空间问题之外,普通索引很容易应用,过滤索引代表了非常定制的解决方案。它们当然不是常规索引的替代品,而是在需要它们的特殊情况下对它们的扩展。
非常有趣的做法。我对创造力的赞许。
既然你回收了空间,我假设原始索引不再存在?过滤索引的缺点是:
实际上,这意味着您必须对过滤索引非常小心,因为它们通常会导致糟糕的查询计划。我不会说它们无用,但我认为它们是对传统索引的补充,而不是作为替代品(正如您正在尝试做的那样)。
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |