Должен ли я указать как INDEX, так и UNIQUE INDEX? - PullRequest
16 голосов
/ 26 декабря 2010

В одной из моих таблиц 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 Ответ

27 голосов
/ 26 декабря 2010

Если у вас есть УНИКАЛЬНЫЙ ИНДЕКС, тогда вам также не нужен ИНДЕКС - он будет избыточным.УНИКАЛЬНЫЙ ИНДЕКС - это и уникальное ограничение, и индекс, который можно использовать как любой другой индекс.

Из документации :

Примечание : предпочтительным способом добавления уникального ограничения в таблицу является ALTER TABLE ... ADD CONSTRAINT.Использование индексов для обеспечения уникальных ограничений может рассматриваться как деталь реализации, к которой нельзя обращаться напрямую.Однако следует помнить, что нет необходимости вручную создавать индексы для уникальных столбцов;это просто дублирует автоматически созданный индекс.

Подчеркните мое.

...