@borisalekseev
extra beginner junior python backend

Необходим ли индекс для boolean, и если да, то какой?

Есть булевое поле, по умолчанию False, со временем появляется все больше и больше True. Знаю, что BTree будет неэффективен, т.к значения распределены очень неравномерно (так ведь?). Какой лучше индекс взять, чтобы при запросе фильтровать по полю и это не отнимало времени?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
Индексы по bool полям в принципе бесполезны. Любые. У вас в таком индексе всего 3 значения как максимум.
Распределены равномерно? Ну и смысл по индексу вычитывать треть таблицы? seqscan быстрее будет.
Распределены неравномерно и вам нужны те редкие значения, отличающиеся от большинства? Сделайте более подходящий под условия запроса частичный индекс с предикатом where column_name = true (или false или is null, смотря где меньше значений)
Ответ написан
Комментировать
@bacon
Если каких-то значений сильно меньше других, то на это значение можно сделать частичный (partial) индекс, так же это поле можно использовать как составной индекс, если кроме него в условие есть другие поля. В любой случае, всё это требует проверки, делаешь индекс, смотришь explain analyze
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@mayton2019
Bigdata Engineer
Нужно смотреть распределение этого индекса по всей таблице. Допустим если будет 33% - null, 33% - TRUE, 33% - FALSE - то такое тяготеет ближе к партишенингу.

Есть смысл также рассмотреть этот булевый индекс как композит в составе другого поля. Это более эффективно.

Про partial уже сказали.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы