【问题标题】:What bad can happen when dropping indexes? [closed]删除索引时会发生什么坏事? [关闭]
【发布时间】:2012-03-02 06:15:40
【问题描述】:

如果我删除 SQL Server 2000 中的现有索引,可能发生的最糟糕的情况是什么(在 2008 R2 中效果是否相似?)?

我知道这可能会减慢一些查询,但这是可能发生的最糟糕的事情吗?

我正在查看索引调整向导并试图决定是否需要保留所有现有索引,因为如果过去的 DBA 应用了错误的索引会怎样?如果调优向导在关闭现有的情况下给我带来了更高的改进百分比,我该怎么办?

【问题讨论】:

    标签: sql sql-server database sql-server-2000


    【解决方案1】:

    如果索引是唯一索引,它会防止插入重复值。如果删除它,可能会在不合适的地方输入唯一值。

    【讨论】:

    • -我认为这是一个约束?
    • 每个 UNIQUE 约束都有其底层 UNIQUE INDEX
    【解决方案2】:
    • 放慢速度,有时戏剧性地
    • 删除唯一索引会导致数据不一致,从而导致错误的查询结果
    • 在计算列上删除索引 - 会更加显着降低性能
    • 增加缓冲池的使用 - 因此可能会拒绝为某些内存加载 CLR 代码甚至常规查询提供服务。由于内存不足可能导致更频繁地重新编译
    • 可能导致更多死锁
    • 会大大增加 IO 子系统的压力

    【讨论】:

    • -有问题的表上没有计算列。另外,这怎么会导致数据不一致?
    • @MAW74656 考虑在唯一列上连接两个表。如果它产生了例如 1 行结果,那么在 uniquness 消失后 - join 可能会产生更多行。还有更多——如果你有像 sum 这样的聚合函数——它的结果会相乘
    • -听起来我永远不应该删除索引...
    • @MAW74656 8-) 有时索引变得无用
    【解决方案3】:

    在 OP 被引导到“永不删除索引”路径之前,让我强调一下:永远不要说永远。

    有时索引比删除它们花费更多。有很多方法可以检查这一点,例如 sys.dm_db_index_usage_stats(它可以告诉您具有大量写入活动但很少或没有读取活动的索引)。

    与往常一样,您应该在具有真实数据和实际负载的隔离环境中测试您的更改。

    【讨论】:

    • 哈哈哈!孤立的环境!?哈哈哈哈……
    • 为什么这么好笑?您是否对生产进行了所有更改而没有正确和彻底地测试它们?如果是这样的话,我不会笑。我可能会掸掉我的简历。
    • -如果您在有测试环境的地方工作,那您将非常幸运。我的地方很便宜,你住还是不做。
    • “储蓄”会在后面咬他们一口,看在你的份上,希望迟早会发生。
    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2022-06-27
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多