谷歌搜索了一段时间后,我在这里发布这个问题,因为我无法在任何地方发现这样的问题。
我们的应用程序有一个包含274列(无LOB或Long Raw列)的表,在8年的时间内,表开始链接行,因此任何全表扫描都会影响性能。
当我们深入挖掘时,我们发现在应用程序的任何地方都没有使用大约50列,因此可以立即删除。但是,这里的挑战是应用程序必须经历许多代码更改才能实现这一目标,并且我们已将基础数据公开为其他应用程序正在使用的服务。因此,我们现在无法选择代码更改作为选项。
我们想到的另一个选择是,我是否可以将这50列作为虚拟列设置为NULL,然后我们只需要对表加载过程进行更改,其余的都将按原样进行。但是我需要专家的建议,是否在表中添加虚拟列不会再次构造链接行。此解决方案是否适用于给定的问题陈述?
谢谢拉米
Oracle每个块只允许255列。对于列数超过255的表,它会将行拆分为多个块。 Find out more。
您的表有274列,因此您有链接的行,因为固有的表结构而不是数据占用的空间量。将五十列全部设为空将不会改变它。
所以,如果你想消除链式行,你真的需要删除行。当然,您不希望更改所有应用程序代码。所以你可以尝试的是: