2010-06-16 2 views
2

я делаю массовые испытания на базе Postgres ...Postgres слишком медленно

поэтому в основном у меня есть 2 таблицы, где я вставил 40.000.000 записей о, скажем table1 и 80.000.000 на table2

после этого я удалил все эти записи.

Теперь, если я делаю SELECT * FROM table1 требуется 199000ms?

Я не могу понять, что происходит?

Может ли кто-нибудь помочь мне в этом?

+0

Сколько данных в каждой строке? Как настроены таблицы? Какие типы ключей вы используете? – glenatron

+0

Какая версия Postgres? Работает ли Autovac? – rfusca

ответ

3

Кортежи логически удалены, а не физически. Вы должны выполнить VACUUM на db. More info here

7

Если вы удалите все строки из таблицы, они помечаются как удаленные, но фактически не удаляются с диска. Чтобы удалить их, вам нужно выполнить операцию «вакуума» - это должно начинаться автоматически через некоторое время после такого большого удаления. Тем не менее, это просто оставит страницы пустыми, но займет довольно много дискового пространства без «полного вакуума».

Если вам регулярно нужно удалять все строки из большой таблицы, попробуйте вместо этого использовать «truncate», что просто защелкнет файл данных таблицы.

0

Если вы удаляете все записи, используйте truncate not delete. Кроме того, при первом запуске это отношение не будет кэшироваться (кеш файла или общие буферы), поэтому он будет медленнее последующих.

Смежные вопросы