Медленное выполнение запроса в пустой таблице. (после удаления большого количества вставок) - PullRequest
13 голосов
/ 10 декабря 2010

У меня есть таблица в базе данных оракула с 15 полями. Эта таблица имела 3500000 вкладок. Я удалил их все.

delete
from table

После этого всякий раз, когда я выполняю оператор выбора
Я получаю очень медленный ответ (7 секунд), хотя таблица пуста. Я получаю нормальный ответ только в том случае, если я ищу в соответствии с индексированным полем.

Почему?

Ответы [ 3 ]

8 голосов
/ 10 декабря 2010

Как говорит Гритем, вам нужно понимать высокие отметки уровня воды и т. Д.

Если вы не хотите truncate таблицу сейчас (поскольку вставлены свежие данные), используйте alter table xyz shrink space документированный здесь для 10g

7 голосов
/ 10 декабря 2010

У Тома Кайта есть хорошее объяснение этой проблемы:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:492636200346818072

Это должно помочь вам понять, удаляет, усекает и ставит водяные знаки и т. Д.

0 голосов
/ 10 декабря 2010

В sql, когда вы хотите полностью очистить таблицу, вы должны использовать усечение вместо удаления. Допустим, у вас есть таблица с 3,5 миллионами строк, и для столбца bigint имеется индекс (уникальный идентификатор), который увеличивается для каждой строки. Усечение таблицы полностью очистит таблицу и сбросит индекс на 0. Удаление не приведет к очистке индекса и продолжится при 3500,001, когда будет вставлена ​​следующая запись. Усечение также намного быстрее, чем удаление. Прочитайте статьи ниже, чтобы понять различия.

Прочтите эту статью Прочтите эту статью , которая объясняет разницу между усечением и удалением. Есть времена, чтобы использовать каждый. Здесь - еще одна статья с точки зрения Oracle.

...