app_id и kind. Всего есть 2000 разных app_id, 130 различных kind и они в находятся в зависимости от app_id. Есть такие app_id у которых есть не весь набор kind, некоторых значений у них вообще не бывает.
Я хочу чтобы в таком случае, планнер знал, когда я делаю запрос where app_id = ‘x’ and kind = ‘y’, чтобы он делал эстимейт на 0 rows, если у такой app_id нету такого kind.
Для того чтоб это сделать я завёл extended statistics по mcv (да и другие тоже) на эти колонки. Но оно так не работает. Я вижу в pg_statistic_ext_data что стата завелась, и она правильно отрабатывает вероятности при поиске по таким kind которые случаются у app_id. Но если мы ищем по kind которого не бывает у той app_id по которой ищем, то планнер берёт дефолтный эстимейт на всю таблицу, а не 0. 🙁 кто сталкивался?
Мне приходилось создавать на обе колонки BTree индекс, чтобы быстро отрабатывали запросы на несуществующие значения. Оценку планировщика это конечно не исправляло.
у меня он из-за как раз ошибки (ошибка в 700к рядов) в плане выбирает фильтр заместо второго индекса. вообще решил проблему, немного переорганизовав индексы
Можно поднять statistic target на эту кастомную статистику, чтобы больше значений попало в гистограммы, а оценка по умолчанию упала.
отличный совет, спасибо, смотрел доку на старые версии
Обсуждают сегодня