Как команда TRUNCATE в Oracle может получить структуру таблицы после ее удаления? - PullRequest
1 голос
/ 05 ноября 2011

Команда SQL TRUNCATE в Oracle выполняется быстрее, чем DELETE FROM table;, поскольку команда TRUNATE сначала удаляет указанную таблицу целиком, а затем создает новую таблицу с той же структурой (может потребоваться пояснение в случае, если я могу быть неправильно ). Поскольку TRUNCATE является частью DDL, она неявно выдает COMMIT перед выполнением и после завершения выполнения. Если это так, то таблица, отброшенная командой TRUNCATE, навсегда теряется со всей своей структурой в словаре данных. В таком случае, как команда TRUNCATE способна сначала отбросить таблицу и воссоздать ее с той же структурой?

Ответы [ 2 ]

7 голосов
/ 05 ноября 2011

(Обратите внимание, что я работаю на Sybase в SQL Anywhere Engineering, и мой ответ основан на моих знаниях о том, как реализовано truncate, но я думаю, что в Oracle это тоже похоже.)

Я не верю, что таблица на самом деле отброшена и воссоздана;содержимое просто выбрасывается.Это намного быстрее, чем delete from <table>, потому что не нужно выполнять триггеры, и вместо того, чтобы удалять строку за раз (как из таблицы, так и из индексов), сервер может просто выбросить все страниц, которыесодержат строки для этой таблицы и любые индексы.

5 голосов
/ 06 ноября 2011

Я думал, что усечение (среди других вещей) просто сбрасывает метку высокой воды.

см .: 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

Понятно, что сегмент данных изменяется после усечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...