Подтвердить что ты не робот

Добавление индекса в булево поле

У меня есть модель Rails с логическим полем, в котором я выполняю поиск (я использую область, которая находит все экземпляры, где для поля установлено значение true). Я использую Postgres.

Мой инстинкт - добавить индекс в логическое поле. Это хорошая практика, или есть что-то в Postgres, что делает ненужным индекс в булевом поле?

4b9b3361

Ответ 1

Нет, вы можете индексировать логическое поле, если вы будете его фильтровать. Это вполне разумная вещь, хотя, как и во всех индексах, PostgreSQL может отказаться игнорировать ее, если она не исключит достаточную таблицу - сканирование индекса плюс тонна выборки строк может быть дороже, чем последовательное сканирование - - который может или не может повлиять на вас в зависимости от значений в этом столбце.

Вы также должны знать, что PostgreSQL позволяет помещать условия в индексы, которые я часто нахожу полезными с булевыми полями. (Подробнее см. Частичные индексы.) Если вы будете обычно фильтровать или сортировать в пределах этой области, вам может быть лучше всего что-то вроде CREATE INDEX ... ON table (some_field) WHERE boolean_field.

Ответ 2

Чтобы создать частичный индекс в миграции Rails, вы сделаете это. В этом примере модель Product, а столбец featured.

class AddFeaturedOnProducts < ActiveRecord::Migration
  def change
    add_index(:products, :featured, where: "featured")
  end
end