Почему count (*) занимает очень много времени в одной базе данных PostgreSQL, а не в другой? - PullRequest
5 голосов
/ 29 июня 2010

У меня есть две базы данных Postgres.В одной у меня есть две таблицы, каждая из которых содержит около 8 000 000 строк, и подсчет каждой из них занимает около секунды.В другой базе данных, также Postgres, есть таблицы с 1 000 000 строк, и для подсчета требуется 10 с, а для одной таблицы - около 6 000 000 строк, а для подсчета требуется 3 минуты.Какие факторы определяют, сколько времени это займет?Они находятся на разных машинах, но база данных, которая занимает больше времени, находится на более быстрой машине.

Я читал о том, как в целом подсчет postgres является медленным, но мне это кажется странным.Я не могу действительно использовать обходной путь, потому что я использую django, и он делает подсчет в админе, который принимает навсегда и затрудняет его использование.

Любая информация по этому вопросу будет полезна.

Ответы [ 3 ]

4 голосов
/ 29 июня 2010

Скорость подсчета зависит не только от количества строк в таблице, но и от времени, необходимого для чтения данных с диска. Время зависит от многих вещей:

  • Количество строк в таблице - как вы уже упоминали.
  • Количество записей на странице (если каждая запись занимает больше места, вам нужно прочитать больше страниц, чтобы прочитать то же количество строк).
  • Если страницы заполнены только частично, вам нужно прочитать больше страниц.
  • Если таблицы уже кэшированы в памяти (здесь доступно больше памяти).
  • Если таблица проиндексирована с небольшим индексом (индекс может быть подсчитан вместо этого).
  • Аппаратные отличия.
  • и т.д ....
0 голосов
/ 02 июля 2010

Правильно ли удален "медленный стол"?

Не не использовать VACUUM FULL, он только создает таблицы и индексный блокВАКУУМ абсолютно достаточно.ВАКУУМНЫЙ АНАЛИЗ был бы даже лучше.

И убедитесь, что автовакуум включен и правильно настроен

0 голосов
/ 29 июня 2010

Индексы, кэши, скорость диска, для начала все это оказывает влияние.

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