powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PreparedStatement в PG
4 сообщений из 4, страница 1 из 1
PreparedStatement в PG
    #35169013
_ppooll__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем один и тот же запрос (Java + c3p0 пул):
Это через PreparedStatement:
Код: plaintext
1.
2.
duration:  0 . 200  ms  bind S_1: SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state=$ 1  GROUP BY     1 
ПОДРОБНОСТИ:  parameters: $ 1  = '0'
duration:  66 . 906  ms  execute S_1: SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state=$ 1  GROUP BY     1 

Это обычный запрос:
Код: plaintext
1.
2.
3.
duration:  0 . 425  ms  parse <unnamed>: SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state= 0  GROUP BY     1 
duration:  0 . 093  ms  bind <unnamed>: SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state= 0  GROUP BY     1 
duration:  0 . 042  ms  execute <unnamed>: SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state= 0  GROUP BY     1 

Итого 66.9+0.2 намного больше чем 0.42+0.09+0.04. Хотя все должно быть иначе. Почему?
PG 8.2.4
...
Рейтинг: 0 / 0
PreparedStatement в PG
    #35169148
ИгС
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень похоже на перекос данных по столбцу state. Если это так, то этот параметр лучше не биндить.

Что выдаст
Код: plaintext
1.
2.
3.
4.
5.
6.
PREPARE q AS 
SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state=$ 1  GROUP BY     1 ;
EXPLAIN ANALYZE EXECUTE q( 0 );

EXPLAIN ANALYZE
SELECT owner,   sum(sum) as sum,   count(*) as cnt FROM    operations WHERE    state= 0  GROUP BY     1 ;
? Сколько всего строк в таблице operations? Когда обновлялась статистика?
...
Рейтинг: 0 / 0
PreparedStatement в PG
    #35169216
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT owner, sum(sum) as sum, count(*) as cnt FROM operations WHERE state=$1 GROUP BY 1
SELECT owner, sum(sum) as sum, count(*) as cnt FROM operations WHERE state=0 GROUP BY 1

наверное для этих двух запросов постгрес выбирает разные планы выполнения
...
Рейтинг: 0 / 0
PreparedStatement в PG
    #35169289
_ppooll__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор? Сколько всего строк в таблице operations? Когда обновлялась статистика?
Данных было ~50000 строк. Специально для тестов очистил таблицу, Сделал VACUUM FULL, индекс по столбцу status присутствует.

Что выдаст сказать уже не могу... Так как данные загружены новые.. И сейчас в таблице ~500 тыс записей.

авторEXPLAIN ANALYZE
SELECT owner, sum(sum) as sum, count(*) as cnt FROM operations WHERE state=0 GROUP BY 1;
Такой запрос точно выдавал index scan

авторОчень похоже на перекос данных по столбцу state.
Да именно так.. Для утреннего теста в таблице со статусом 0 было 0 записей.. 49000 записей приходилось на 2 других статуса. Естественно выборка по другим статусам происходила по seq scan. Как вообще стоится план запроса при PreparedStatement?

PS: Благодарю всех ответивших. Кажется становятся понятны причины.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PreparedStatement в PG
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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