Должен ли я создать уникальный индекс, если столбец содержит уникальное ограничение, и я хочу выполнить быстрый поиск по этому столбцу?
Например, у меня есть таблица users
со столбцом login
, которая должна быть уникальной.Мне нужен быстрый поиск пользователя по столбцу login
.
Какой лучший способ сделать это:
- создать уникальное ограничение (оно создает внутренний уникальный индекс - используется ли онов запросах на выборку с
WHERE login = 'something'
?) - создать уникальный индекс
- создать уникальный индекс и уникальное ограничение (индекс дублирует внутренний индекс?)
Второй случайуникален login
для незарегистрированных пользователей (столбец locked = false
).Postgres не поддерживает частичные условия.Должен ли я создать уникальный условный и частичный индекс или достаточно только частичного индекса?
И еще один вопрос: я должен создать новый индекс для столбца с внешним ключом?Например: users.employee_id
относится к employees.id
. Должен ли я создать индекс для столбца employee
для оптимизированного запроса SELECT * FROM users WHERE employee_id = ....
?Когда внутренние индексы используются механизмом оптимизации, а когда нет?