powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Долгие запросы к таблице
7 сообщений из 7, страница 1 из 1
Долгие запросы к таблице
    #32613242
kvadratik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения за, возможно, глупый вопрос, но всё же..

Посылаю запрос
Код: plaintext
SELECT COUNT(*) FROM users; 
370 строк - запрос выполнялся больше 20 секунд.

Запрос
Код: plaintext
SELECT COUNT(*) FROM account; 
283406 строк - время выполнения 12 секунд.

Пробовал сделать
Код: plaintext
VACUUM users
&
Код: plaintext
VACUUM ANALYZE users
.
Похоже, что помогло, но очень незначительно.

Подскажите в чём дело.
Заранее благодарю.
...
Рейтинг: 0 / 0
Долгие запросы к таблице
    #32613257
Эридан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-первых, сделай VACUUM FULL, во-вторых, если результат запроса не сильно критичен - попробуй к примеру SELECT count(*) FROM users WHERE id>0, где id - pimary key. Суть та же, но это позволяет использовать индекс, и в некоторых запущенных случаях позволяет повысить производительность.
...
Рейтинг: 0 / 0
Долгие запросы к таблице
    #32613427
kvadratik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, помогло. Всё отлично работает :)
...
Рейтинг: 0 / 0
Долгие запросы к таблице
    #32613590
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(<primary_key>) from <table> тоже покатит
...
Рейтинг: 0 / 0
Долгие запросы к таблице
    #32613783
Эридан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
visselect count(<primary_key>) from <table> тоже покатит

Мне кажется, нет, поскольку при вычислении агрегатных функций индексы не используются.
...
Рейтинг: 0 / 0
Долгие запросы к таблице
    #32613956
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эридан visselect count(<primary_key>) from <table> тоже покатит

Мне кажется, нет, поскольку при вычислении агрегатных функций индексы не используются.

проверил... был неправ :)
таки не работает индекс для count()
...
Рейтинг: 0 / 0
Долгие запросы к таблице
    #32614358
Эридан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое смешное, что предложенный мной способ (WHERE id>0) тоже не всегда цепляет индексы. Зависит от того, как лягут звезды для оптимизатора.

Да и вообще не дело это. Надо безо всяких условий писать :)

В свое время я связывался с одним из разработчиков Postgres, вот цитата из письма:

Мой вопрос:
> Добрый день, Теодор.
>
> Скажи пожалуйста, как рекомендуется вычислять точное количество > записей в таблице?
>
> Согласно документу
> http://www.postgresql.org/docs/7.4/interactive/functions-aggregate.html
> насколько я понял, есть определенные проблемы с вычислением
>
> select count(*)
> from some_table

Ответ Теодора Сигаева:

> Так и рекомендуется. Проблемы есть только в быстродействии. Но для
> быстродействия стоит написать триггера на insert & delete, которые щелкают
> счетчик в отдельной таблице).

> Проблемы с быстродействием заключаются в MVCC (multi version concurrence
> control) - в зависимости от настроек transaction isolation level и текущих
> транзакций рез-тат может быть разный. Поэтому только sequence scan гарантирует
> целостность count(*).
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Долгие запросы к таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]