powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / неправильная оценка строк
3 сообщений из 3, страница 1 из 1
неправильная оценка строк
    #39804007
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
имеем вот такой простой запрос
Код: plsql
1.
2.
explain analyze select * from datas where typeid = (select id from types where name = 'calendar')
"Index Scan using index_ao on "DATAS"  (cost=1.60..2784.04 rows=3758 width=56) (actual time=0.052..0.083 rows=26 loops=1)"



видно что планировщик сильно промазал в оценке кол-ва строк. Далее

Код: plsql
1.
2.
3.
select id from types where name = 'calendar'
id
26




Код: plsql
1.
2.
explain analyze select * from datas where typeid = 26
"Index Scan using index_ao on "DATAS"  (cost=0.41..50.75 rows=39 width=56) (actual time=0.025..0.060 rows=26 loops=1)"



Почти точно.

в таблице datas 56k строк
в таблице types 15 строк с уникальными "name"
Понятно, что в случае с подзапросом, он разделил 56000/15 и получил среднее ожидаемое 3758 строк, но можно ли как то заставить высчитать реальное значение?
Пробовал limit ставить, уник. индекс строить...не помогает.
...
Рейтинг: 0 / 0
неправильная оценка строк
    #39804181
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gav21,

можно в stable хранимку подзапрос засунуть, чтобы заставить вычислить подставляемое значение typeid на этапе планирования.
либо оптимизировать проблемный запрос другими способами (не обязательно вправляя оценку строк в этом месте).
...
Рейтинг: 0 / 0
неправильная оценка строк
    #39804234
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexiusgav21,

можно в stable хранимку подзапрос засунуть, чтобы заставить вычислить подставляемое значение typeid на этапе планирования.
либо оптимизировать проблемный запрос другими способами (не обязательно вправляя оценку строк в этом месте).

Спасибо за совет.
Проблема решилась иначе.
Если коротко - был запрос с 11 подзапросами во FROM, и оптимизатор строил план на nested loop с такими вот промахами в оценках. Если через set запрещать nested loop, то на hash join все работало хорошо.
Позже я вспомнил про параметр from_collapse_limit, увеличение которого чудесным образом вправило мозги оптимизатору и план стал вменяемый.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / неправильная оценка строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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