172 похожих чатов

Коллеги, есть таблица (300 млн записей), в ней есть поле

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. 🙁 кто сталкивался?

4 ответов

11 просмотров

Мне приходилось создавать на обе колонки BTree индекс, чтобы быстро отрабатывали запросы на несуществующие значения. Оценку планировщика это конечно не исправляло.

Antons 🕷-Mur Автор вопроса
Andrey Novikov
Мне приходилось создавать на обе колонки BTree инд...

у меня он из-за как раз ошибки (ошибка в 700к рядов) в плане выбирает фильтр заместо второго индекса. вообще решил проблему, немного переорганизовав индексы

Antons 🕷 Mur
у меня он из-за как раз ошибки (ошибка в 700к рядо...

Можно поднять statistic target на эту кастомную статистику, чтобы больше значений попало в гистограммы, а оценка по умолчанию упала.

Antons 🕷-Mur Автор вопроса
Andrey Novikov
Можно поднять statistic target на эту кастомную ст...

отличный совет, спасибо, смотрел доку на старые версии

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта