This链接声明可以将所有可以为空的列添加到数据库表的末尾以节省空间。
我的问题是如何确保始终将列添加到数据库表的末尾。我假设当我CREATE TABLE ..
时,我应该在最后添加所有NULLABLE列。但是当我使用ALTER TABLE X ADD COLUMN ..
时,这是如何工作的?
答案 0 :(得分:6)
与某些DBMS不同,Oracle无法在表中的特定位置添加列;最后总会添加新列。所以,你不能为此做任何特别的事情。你所拥有的只是:
答案 1 :(得分:4)
文档并未说明所有尾随的可空列都不会占用任何空间。它说“用于尾随 null 列,Oracle数据库甚至不存储列长度。” - 我的重点。这意味着对于每个列都没有任何数据 Oracle不会存储列的长度。
前面的句子是“为了节省空间,列中的空值只存储列长度(零)”,即Oracle每行只存储一个字节。
因此,只要在列中添加任何数据,就不会保存任何空间。此外,即使你的桌子大约1米行,你也只能节省1MB,几乎没有。这不值得担心。
答案 2 :(得分:1)
如果使用ALTER TABLE,则无效。如果您在更改表后绝对需要重新排列表,则可以使用create table作为select(CTAS)将数据复制到另一个表(具有正确顺序的列),删除原始表并重命名新表之后表到原始表名。 当然,删除原始表将使所有其他对象无效,具体取决于您的表,因此这可能不是一个可行的选项。