在表的末尾存储NULLABLE列 - Oracle

时间:2012-03-24 20:14:10

标签: oracle

This链接声明可以将所有可以为空的列添加到数据库表的末尾以节省空间。

我的问题是如何确保始终将列添加到数据库表的末尾。我假设当我CREATE TABLE ..时,我应该在最后添加所有NULLABLE列。但是当我使用ALTER TABLE X ADD COLUMN ..时,这是如何工作的?

3 个答案:

答案 0 :(得分:6)

与某些DBMS不同,Oracle无法在表中的特定位置添加列;最后总会添加新列。所以,你不能为此做任何特别的事情。你所拥有的只是:

  • 通常,如果您的表具有可为空的列,则不需要添加任何新的非可空列(特别是因为您必须更新所有现有记录以提供某种填充值)。
  • 中间有可空栏目,并非非常有害;这意味着长度(0)需要存储,否则就不会存储。除非你真的拥有大量的非空数据非常少但有很多尾随空值的行,否则这实际上不会产生重大影响。

答案 1 :(得分:4)

文档并未说明所有尾随的可空列都不会占用任何空间。它说“用于尾随 null 列,Oracle数据库甚至不存储列长度。” - 我的重点。这意味着对于每个列都没有任何数据 Oracle不会存储列的长度

前面的句子是“为了节省空间,列中的空值只存储列长度(零)”,即Oracle每行只存储一个字节。

因此,只要在列中添加任何数据,就不会保存任何空间。此外,即使你的桌子大约1米行,你也只能节省1MB,几乎没有。这不值得担心。

答案 2 :(得分:1)

如果使用ALTER TABLE,则无效。如果您在更改表后绝对需要重新排列表,则可以使用create table作为select(CTAS)将数据复制到另一个表(具有正确顺序的列),删除原始表并重命名新表之后表到原始表名。 当然,删除原始表将使所有其他对象无效,具体取决于您的表,因此这可能不是一个可行的选项。