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

问题描述 投票:2回答:1

谷歌搜索了一段时间后,我在这里发布这个问题,因为我无法在任何地方发现这样的问题。

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

当我们深入挖掘时,我们发现在应用程序的任何地方都没有使用大约50列,因此可以立即删除。但是,这里的挑战是应用程序必须经历许多代码更改才能实现这一目标,并且我们已将基础数据公开为其他应用程序正在使用的服务。因此,我们现在无法选择代码更改作为选项。

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

谢谢拉米

oracle oracle11g storage virtual-column
1个回答
1
投票

Oracle每个块只允许255列。对于列数超过255的表,它会将行拆分为多个块。 Find out more

您的表有274列,因此您有链接的行,因为固有的表结构而不是数据占用的空间量。将五十列全部设为空将不会改变它。

所以,如果你想消除链式行,你真的需要删除行。当然,您不希望更改所有应用程序代码。所以你可以尝试的是:

  • 重命名表
  • 删除不再需要的列
  • 使用原始表名创建视图,并在视图的投影中包含NULL列以匹配原始表结构。
© www.soinside.com 2019 - 2024. All rights reserved.