Должен ли я указать как 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. Использование индексов для реализации уникальных ограничений может рассматриваться как деталь реализации, к которой нельзя обращаться напрямую. Однако следует помнить, что нет необходимости вручную создавать индексы для уникальных столбцов; это просто дублирует автоматически созданный индекс.

Акцент мой.

Другие вопросы по тегам