2013-06-18 4 views
1

После некоторого исследования по сети около Уникальный ключ и уникальный индекс. Я понимаю, что оба они проверяют столбец, однако уникальный индекс лучше для производительности.
Что лучше, добавив уникальный ключ или уникальный индекс expecialy, если я получил таблицу с более чем 500 строк (я уже использовал первичный ключ для других столбцов).
- Если уникальный индекс лучше из-за производительности, то когда мы используем уникальный ключ? так как оба они принимают нулевое значение (кстати, мы можем заставить их принимать только не нулевые значения? like'add unique key not null??)
-если уникальный ключ лучше, если через год таблица будет 2000 строк, Я не уверен, что в будущем в этой таблице будет много записей.
Когда мы используем уникальный индекс и уникальный ключ?

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

+0

Связанный: ["novalidate with error ora-02299"] (http://stackoverflow.com/questions/17163580/novalidate-with-error-ora-02299) –

+1

"Что делать, если через год таблица составляет 2000 строк ». Шутки в сторону? Это 2013 год, мы в эпоху экзабайта. – APC

ответ

2

как UNIQUE INDEX и UNIQUE KEY навязывает уникальность значений поля. Но если вам нужно ссылаться на поле с внешним ключом из другой таблицы, вам нужен уникальный ключ.

Кстати, мы можем сделать так, чтобы они принимали только нецензурные значения?

Да, использовать оба NOT NULL и ограничение уникальности

И, конечно же, если вы хотите производительность поиска по этому полю, добавьте INDEX на этом поле.

+0

нет Мне не нужен внешний ключ, поэтому я должен выбрать уникальный индекс? – Moudiz

+0

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

+0

«И, конечно, если вам нужна производительность при поиске по этому полю, добавьте INDEX в это поле». ... уникальное ограничение требует индекса в любом случае - не уверен, что вы здесь говорите. –

2

В основном это семантика. Уникальным ключом является фактическое правило. Уникальный индекс - это индекс, который помогает Oracle (быстро) применять это правило. В старых версиях Oracle (< 8) создание уникального ключа также заставило Oracle создавать индекс автоматически. Позже это было изменено.

Отличный пост, объясняя различия и историю более подробно можно найти здесь:

http://www.jlcomp.demon.co.uk/faq/uk_idx_con.html

+0

Да, я видел его статью, он объяснил разницу в хорошем смысле, но какой я должен выбрать, а также добавил: «Практическая разница между использованием уникального индекса для поддержки целостности данных и уникального ключа или первичного ключа в тех же столбцах поскольку Oracle будет создавать индекс для поддержки ограничения, если вы этого не сделаете, значит, у моего уникального ключа будет индекс? – Moudiz

+1

@GolezTrol - вы должны заменить эту ссылку http://www.jlcomp.demon.co.uk/faq/uk_idx_con.html - Ананта просто скопировал чужую статью и передал ее как свою собственную без атрибуции. –

+0

@DavidAldridge Вы правы. Я изменил ссылку. – GolezTrol

4

Весь ваш вопрос основан на «Я понимаю, что оба они проверяют столбец, однако уникальный индекс лучше для производительности». Это очень сомнительно, так как уникальное ограничение, как правило, поддерживается уникальным индексом, и очень мало различий в производительности между уникальными и неуникальными индексами. Индекс всегда поддерживает уникальное ограничение.

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

Смежные вопросы