Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / неправильная оценка строк / 3 сообщений из 3, страница 1 из 1
19.04.2019, 15:32
    #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
20.04.2019, 07:19
    #39804181
Alexius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
неправильная оценка строк
gav21,

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

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

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


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