оценки селективности. В результате выбирается nested loop
Nested Loop (cost=1.71..56.22 rows=2 width=336) (actual time=0.119..3044.548 rows=860360 loops=1)
Думали, что выберем 2 записи, а выбрали почти миллион. Ничего себя так ошиблись?
Это, к сожалаению, больная мозоль постгреса. Он очень плохо учитывает корреляцию между колонками.
Что можно сделать?
1. запретит nested loop (/в данном случае не поможет)
2. создать составную (многоколоночную) статистику: тут главное понять для каких колонок её надо создать. Как подсказку можете ориентироваться на составные индексы, которые у вас есть. У нас в ПгПро используется патч для постгреса, которые неявно создаёт статистику по составным индексам. Для 1С запросов очень помогает.
3ю поиграть с параметрами оптимизатора, заставив его выбрать правильный план. Это очень не тривиальная задача.
3. Использовать расширения типа AQO,которые с помощью ML могут сами подправить селективность
Т.е. без вот этих специальных мер его так и будет колбасить между "быстрым" и "медленным" режимом в зависимости от фазы луны? 8( ) Его эти reindex/analyze иногда переключают, но я не могу понять закономерности.
Коллеги, добрый вечер. И снова я со своим уже не таким "мистическим" запросом. :) Мои попытки посоздавать разные статистики благополучно провалились, но зато внезапно действительно помогло это расширение AQO. Результат попахивает магией, но для "мистического запроса" самое то :)
Обсуждают сегодня