Ответ 1
Как говорит Гритем, вам нужно понять знаки высокой воды и т.д.
Если вы не хотите truncate
таблицу теперь (поскольку свежие данные были вставлены), используйте alter table xyz shrink space
documented здесь для 10g
У меня есть таблица в базе данных оракула с 15 полями. В этой таблице было 3500000 вставок. Я удалил их все.
delete
from table
После этого всякий раз, когда я выполняю оператор select Я получаю очень медленный ответ (7 секунд), хотя таблица пуста. Я получаю нормальный ответ только в том случае, если я ищу в соответствии с индексированным полем.
Почему?
Как говорит Гритем, вам нужно понять знаки высокой воды и т.д.
Если вы не хотите truncate
таблицу теперь (поскольку свежие данные были вставлены), используйте alter table xyz shrink space
documented здесь для 10g
У Тома Ките есть хорошее объяснение этой проблемы:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:492636200346818072
Он должен помочь вам понять удаление, усечение и высокие водяные знаки и т.д.
В sql, когда вы хотите полностью очистить таблицу, вы должны использовать truncate вместо delete. Скажем, у вас есть таблица с 3,5 миллионами строк в ней, и есть индекс (уникальный идентификатор) в столбце bigint, который увеличивается для каждой строки. Усечение таблицы полностью очистит таблицу и reset от индекса до 0. Удалить не будет очищать индекс и будет продолжаться до 3500,001, когда будет вставлена следующая запись. Усечение также намного быстрее, чем удаление. Прочтите приведенные ниже статьи, чтобы понять различия.
Прочтите эту статью Прочитайте эту статью, в которой объясняется разница между truncate и delete. Есть время, чтобы использовать каждый. Здесь - еще одна статья с точки зрения Oracle.