Можно ли ускорить поиск, как показано ниже, с помощью индекса flags
, где 5
может быть любым числом?
select * from user where flags & 5 > 0
flags
— это целочисленный столбец, и идея этого заключается в том, чтобы хранить различные логические атрибуты в одном столбце. Итак, для этого примера это может быть:
flags bit | 1 | 2 | 4 | 8 | ...
meaning | is admin | banned | password needs change | whatever | ...
Таким образом, пользователь, являющийся администратором и чей пароль необходимо изменить, может быть найден с помощью приведенного выше оператора select (даже если у него также установлены другие флаги).
Для postgreSQL я мог бы добавить такой индекс выражения для приведенного выше запроса:
create index index_name on user ((flags & 5 > 0))
Но тогда мне пришлось бы создавать индекс для каждой комбинации флагов, потому что указанный выше индекс работает только для значения flags & 5
.
Так есть ли индекс для ускорения flags & any_number > 0
?
Я знаю, что мог бы использовать разные логические столбцы для каждого флага (мне кажется неудобным, если у меня > 50 флагов) или битовый тип данных postgreSQL (для которого, как я полагаю, существует тип индекса), но меня особенно интересует, есть ли способ получить индекс для приведенного выше варианта использования в целочисленном столбце.