Должен ли я указать как INDEX, так и UNIQUE INDEX?
В одной из моих таблиц PostgreSQL у меня есть набор из двух полей, которые будут определены как уникальные в таблице, но также будут использоваться вместе при выборе данных. Учитывая это, нужно ли мне только определять УНИКАЛЬНЫЙ ИНДЕКС или я должен указывать ИНДЕКС в дополнение к УНИКАЛЬНОМУ ИНДЕКСУ?
Это?
CREATE UNIQUE INDEX mytable_col1_col2_idx ON mytable (col1, col2);
Или это?
CREATE UNIQUE INDEX mytable_col1_col2_uidx ON mytable (col1, col2);
CREATE INDEX mytable_col1_col2_idx ON mytable (col1, col2);
1 ответ
Если у вас есть УНИКАЛЬНЫЙ ИНДЕКС, тогда вам также не нужен ИНДЕКС - он будет избыточным. УНИКАЛЬНЫЙ ИНДЕКС - это и уникальное ограничение, и индекс, который можно использовать как любой другой индекс.
Из документации:
Примечание. Предпочтительным способом добавления уникального ограничения в таблицу является ALTER TABLE ... ADD CONSTRAINT. Использование индексов для реализации уникальных ограничений может рассматриваться как деталь реализации, к которой нельзя обращаться напрямую. Однако следует помнить, что нет необходимости вручную создавать индексы для уникальных столбцов; это просто дублирует автоматически созданный индекс.
Акцент мой.