nik*_*206 24 postgresql ddl database-design database-performance postgresql-9.2
所以我有一个包含大型数据集的表,这个表有三列我想删除.
问题是:Postgres将如何处理它?
它会遍历每个条目还是只是更新映射信息而没有太多开销?ALTER TABLE
在这种特殊情况下,我可以只使用或应该使用交换表吗?
并且,如果它有任何区别,则所有三列都具有固定长度(两个整数和一个数字).
如果已经有人问过我很抱歉,但谷歌找不到任何相关的问题/文章......
Pav*_*ule 34
ALTER TABLE DROP COLUMN只是禁用系统表中的列.它非常快,但它不会从堆文件中删除数据.您必须稍后执行VACUUM FULL以压缩分配的文件空间.所以ALTER TABLE DROP COLUMN非常快.你要压缩文件,你必须调用较慢(使用独占锁定)VACUUM FULL.
Erw*_*ter 34
谷歌可能对这个问题毫无用处,但手册很少会失败:
该
DROP COLUMN
形式不物理删除列,但只是让无形的SQL操作.表中的后续插入和更新操作将为列存储空值.因此,删除列很快,但不会立即减少表的磁盘大小,因为已删除列所占用的空间不会被回收.随着现有行的更新,该空间将随着时间的推移而被回收.
和:
要强制立即重写表,可以使用VACUUM FULL,CLUSTER或其中一种强制重写的ALTER TABLE形式.这导致表中没有语义上可见的变化,但摆脱了不再有用的数据.
具体而言,attisdropped
系统目录表中的列pg_attribute
设置为TRUE
.
归档时间: |
|
查看次数: |
9224 次 |
最近记录: |