Уникальное ограничение в MySQL - PullRequest
4 голосов
/ 02 августа 2009

Является ли уникальное ограничение индексом по умолчанию? Если нет, имеет ли уникальное ограничение те же результаты производительности, что и индексированный столбец, при использовании его в предложении SELECT ... WHERE?

Спасибо

Ответы [ 5 ]

4 голосов
/ 02 августа 2009

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

2 голосов
/ 02 августа 2009

Ограничение на самом деле очень отличается от индекса: оно просто говорит о том, что MySQL должен обеспечивать уникальность для вас. Однако индекс (хотя он может быть уникальным) касается физического упорядочения на жестком диске или дополнительных структур (обычно дерева), которые обеспечивают эффективный поиск по столбцу.

Однако вы можете все это путать с первичными ключами, которые определяют (обычно кластеризованный) уникальный индекс.

1 голос
/ 02 августа 2009

UNIQUE на самом деле является ограничением для индекса, поэтому да, UNIQUE подразумевает, что существует индекс в поле, для которого вы применяете уникальность.

1 голос
/ 02 августа 2009

Уникальное ограничение - это способ выражения того факта, что что-то (например, некоторая комбинация значений атрибутов) должно быть уникальным в рамках всего отношения («таблица»)).

То есть на уровне ЛОГИЧЕСКОГО дизайна.

Индекс - это, возможно, полезное средство для обеспечения соблюдения такого ограничения.

То есть на уровне ФИЗИЧЕСКОГО замысла.

Некоторые продукты СУБД могут выводить некоторые физические конструктивные конструкции, такие как наличие некоторого индекса, из наличия определенных конструктивных логических конструкций, таких как ограничение UNIQUE. Другие не могут.

0 голосов
/ 02 августа 2009

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

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

Когда вы объявляете первичный ключ, СУБД создаст для вас индекс. Вы можете удалить индекс, если хотите, но вы получите ужасную производительность, когда СУБД выполнит сканирование таблиц для проверки уникальности.

Ограничения первичного ключа обеспечивают целостность объекта, в то время как ограничения REFERENCES (внешний ключ) обеспечивают ссылочную целостность. Вместе они имеют большое значение для обеспечения целостности данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...