【问题标题】:Effect of renaming table column on explain/execution plans重命名表列对解释/执行计划的影响
【发布时间】:2012-06-17 23:11:11
【问题描述】:

我有一个包含 300 多列和数十万条记录的表。我需要重命名现有列之一。

我有什么需要担心的吗?此操作是否会对解释计划等产生影响?

注意事项:

  1. 我正在 Oracle 11g 上开发实时生产数据库。

  2. 当前未使用此列。它没有为任何行填充,我 100% 确定没有任何现有查询引用此列。

【问题讨论】:

  • 好的。所以你绝对确定没有人对着桌子做SELECT *
  • 是的。表格中没有选择 *。

标签: oracle oracle11g explain sql-execution-plan


【解决方案1】:

如果“在实时生产数据库上工作”意味着您将尝试在人们工作时不在较低环境中进行测试的情况下执行此操作,我强烈反对该计划。

涉及您正在对其执行 DDL 的表的现有查询计划将失效,因此需要再次对这些查询进行硬解析。如果有大量此类查询,这很容易成为一项昂贵的操作。某些查询计划当然可能会因为其他内容发生更改而更改(即统计信息不同,设置不同,绑定变量不同等)。它们不会因为列名更改而更改,但列名更改可能导致计划改变。

显然,您正在执行的任何查询都需要在重命名列后立即使用新名称。这通常意味着您需要在修改代码(包括存储过程)以及列名时进行协调发布。反过来,这通常意味着您将其作为构建的一部分进行,其中至少包含一些停机时间。如果您拥有企业版,您可能可以在不停机的情况下进行基于版本的重新定义,但这会增加流程的复杂性,并且您绝对需要在产品中实施之前彻底测试。

【讨论】:

  • 感谢您的 cmets Justin。我肯定计划首先在较低的环境中执行此操作,然后将其转移到生产环境中,这会涉及一些停机时间。
  • 我添加了一些额外的注释。这对你的回答有什么影响吗?
  • @Curious - 没有变化。如果您确实没有引用该列的查询,包括没有执行SELECT * 的任何查询,那么您将没有任何查询要修改。就个人而言,我仍然认为任何对表操作的东西都需要在较低的环境中进行测试,以确认一切仍在工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2012-12-26
  • 2017-03-11
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多