Ответ
Индексы на булевых полях обычно неэффективны, так как у них низкая селективность (всего 2 значения). В большинстве СУБД (PostgreSQL, MySQL) индекс на поле is_active BOOLEAN будет бесполезен, если распределение значений примерно 50/50.
Исключения:
- Когда одно значение встречается редко (например,
is_adminгде админов <1%) - Для частичных индексов (PostgreSQL):
CREATE INDEX idx_is_active ON users(is_active) WHERE is_active = true;
Пример на Go с GORM:
// Плохо (индекс не поможет)
type User struct {
IsActive bool `gorm:"index"`
}
// Лучше (частичный индекс)
db.Model(&User{}).Where("is_active = ?", true).AddIndex("idx_is_active", "is_active")
Всегда анализируйте запросы через EXPLAIN перед добавлением индексов.