据说我们应该在删除之前截断一个大表,它会提高性能。这是真的吗?
答案 0 :(得分:10)
IMO一般来说,如果您只是想放弃一张桌子,那么DROP
是合适的。它将以与TRUNCATE
相同的方式释放空间,并且它具有原子的优势(没有查询将有机会看到表“空”)。
从10g +起,删除的表格不会立即被删除:如果有足够的空间,它将被放入recycle bin。如果先截断表,则回收站中不会保留任何数据。这可能就是为什么你被告知要先截断(?)。
在任何情况下,如果您想绕过回收站,您可以发出DROP TABLE your_table PURGE
,此语句将是原子的。
答案 1 :(得分:1)
完全取决于你是否希望能够在出现问题时回滚。
删除数据会记录删除数据库的事务日志,直到您提交更改为止。
Truncation会删除表中的所有数据而不记录这些日志,因此在执行此操作时可以显着提高性能。只要确定你知道自己在做什么,因为无法回头。
答案 2 :(得分:0)
重置高水位标记可能是一个好主意。