Какая польза от уникального индекса? - PullRequest
0 голосов
/ 07 июня 2018

Это может быть очень глупый вопрос, но я никогда не использовал уникальные индексы: хотя я использовал уникальные ограничения.

Я прочитал связанный вопрос Уникальный индекс против уникального ограничения, которое используетуникальный индекс , но до сих пор не могу понять, почему существуют уникальные индексы.

Для меня UNIQUE звучит скорее как ограничение, чем как индекс.Разве это не должно всегда указываться как ограничение?Или я что-то здесь упускаю?(более вероятный).Итак, простыми словами, у меня есть вопрос:

  • Какая польза от уникального индекса?

Может быть, ответ лежит в учебниках истории и связан с тем, как они былихронологически развит.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Одна вещь, которую может сделать уникальный индекс, что уникальное ограничение не может дать, приведена в документации PostgreSQL об уникальных ограничениях .

Невозможно записать ограничение уникальности, охватывающее только некоторые строки.как уникальное ограничение, но можно применить это ограничение, создав уникальный частичный индекс.

В своих частичных уникальных индексных документах они приводят пример.

Предположим, у нас есть таблица с описанием результатов теста.Мы хотим убедиться, что для данной комбинации субъекта и цели существует только одна «успешная» запись, но может быть любое количество «неудачных» записей.Вот один из способов сделать это:

CREATE UNIQUE INDEX tests_success_constraint ON tests (subject, target) WHERE success;

0 голосов
/ 07 июня 2018

В общем, уникальные ограничения реализуются с использованием уникальных индексов (насколько я знаю, независимо от базы данных).Различия между ними довольно незначительны - часто приходится иметь дело только с именем ограничения в случае нарушения ограничения.Некоторые базы данных позволяют вам выбрать тип индекса для уникального индекса, так что это будет еще одна небольшая разница.

Почему они существуют?Я могу спекулировать.Разработчики SQL могут в значительной степени согласиться с тем, что единственный разумный способ реализации уникального ограничения - это использование уникального индекса.Учитывая, что CREATE INDEX уже существует, почему бы просто не разрешить использование уникальной опции?В конце концов, база данных должна поддерживать возможность создания уникального индекса.

...