【问题标题】:Is it good to drop and recreate index frequently经常删除和重新创建索引是否好
【发布时间】:2018-07-13 17:17:28
【问题描述】:

我们对具有索引的表存在性能问题。加载需要 1 小时,但如果我们删除索引并在每次加载后重新创建它们,它会在 30 分钟内执行。

在每个循环之后删除并重新创建该表的索引是否可行?

【问题讨论】:

  • 请告诉我为什么要删除并重新创建索引?
  • 因为 DML 性能非常缓慢,并且不知何故,当我们删除并重新创建相同的索引时,它花费的时间更少。 drop 和 recreate 背后没有逻辑,但它帮助我们做到了。如果我们能避免它,你能帮忙吗?我不认为这种 drop and recreate 是性能的解决方案
  • 简短的回答是也许。但是,如果表上有太多索引,以至于删除和重新创建它们比维护它们更快,那么问题可能出在索引上。也许你有太多的,也许他们的结构很糟糕。你应该考虑审计你的索引使用情况。也许你有一些索引,你最好放弃它们。
  • 加载前删除索引,加载后重新创建?
  • 是一个大的插入语句还是多个?它们是位图索引吗?表有多少个索引?您是否监控索引使用情况?

标签: oracle performance bulk-operations


【解决方案1】:

听起来您正在尝试将批量数据加载到具有多个索引的表中,但如果存在索引,您会发现加载速度慢得令人无法接受

如果这是您的问题,Oracle 允许您禁用和重建索引,而不必删除并重新创建它们:https://docs.oracle.com/cd/E18283_01/server.112/e17120/indexes004.htm#CIHJCEAJ

Oracle 还提供this guidance 何时使用此功能:

当您想要提高批量加载的性能、在删除索引之前测试删除索引的效果或以其他方式暂停优化器对索引的使用时,请使用不可用或不可见的索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多