2

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

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

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

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

谢谢拉米

4

1 回答 1

1

Oracle 只允许每个块有 255 列。对于超过 255 列的表,它将行拆分为多个块。了解更多

您的表有 274 列,因此由于固有的表结构而不是数据占用的空间量,您已经链接了行。使五十列全部为空不会改变这一点。

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

  • 重命名表
  • 删除不再需要的列
  • 使用原始表名创建视图,并在视图的投影中包含 NULL 列以匹配原始表结构。
于 2018-09-02T13:35:21.250 回答