Oracle中的SQL命令TRUNCATE比DELETE FROM table;TRUNATE命令首先完全删除其中的指定表然后创建具有相同结构的新表(在我可能错误的情况下可能需要澄清)更快.由于TRUNCATE是DDL的一部分,因此它在执行之前和执行完成之后隐式发出COMMIT.如果是这种情况,那么由TRUNCATE命令删除的表将永久丢失,并且它在数据字典中的整个结构.在这种情况下,TRUNCATE命令如何能够首先删除表并使用相同的结构重新创建相同的表?
(请注意,我在SQL Anywhere工程中为Sybase工作,我的答案来自于我对如何truncate在那里实现的知识,但我想它在Oracle中也是类似的.)
我不相信桌子实际上是被丢弃并重新创建的; 内容被简单地扔掉了.这比delete from <table>不需要执行触发器要快得多,而不是一次删除一行(来自表和索引),服务器可以简单地丢弃包含该表和任何索引的行的所有页面.
我认为截断(amoungst其他的东西)只是重置高水印.
请参阅:http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10007.htm#SQLRF01707
但是在 http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:2816964500346433991
很明显,截断后数据段会发生变化.
| 归档时间: |
|
| 查看次数: |
1393 次 |
| 最近记录: |