Oracle 11g用虚拟列替换物理列

时间:2018-09-02 04:53:02

标签: oracle oracle11g storage virtual-column

搜索了一段时间后,我在这里发布了这个问题,因为我找不到在任何地方发布的此类问题。

我们的应用程序有一个包含274列(无LOB或Long Raw列)的表,并且在8年的时间里,该表开始具有链接的行,因此任何全表扫描都会影响性能。

当我们深入研究时,发现大约50列未在应用程序中的任何地方使用,因此可以立即删除。但是这里的挑战是应用程序必须进行许多代码更改才能实现此目的,并且我们已经将基础数据公开为服务,其他服务也正在使用该服务。因此,我们暂时无法选择更改代码。

我们认为的另一种选择是,是否可以将这50列作为虚拟列始终设置为NULL,那么我们只需要对表加载过程进行更改,其余所有都将保持原样。但是我需要专家的建议,是否将虚拟列添加到表中不会再次构造链接的行。此解决方案适用于给定的问题陈述吗?

谢谢 拉米

1 个答案:

答案 0 :(得分:1)

Oracle每个块仅允许255列。对于具有255列以上的表,它将行分成多个块。 Find out more

您的表格有274列,因此您具有链接的行,这是因为表格固有的结构而不是数据占用的空间。将五十列全都设为null不会改变这一点。

因此,如果要消除链接的行,则确实需要删除行。当然,您不想更改所有应用程序代码。因此,您可以尝试的是:

  • 重命名表
  • 删除不需要的列
  • 使用原始表名创建一个视图,并在视图的投影中包含NULL列以匹配原始表结构。