Основной первичный Oracle Основной vs единственный vs единственный Индекс

Я хотел бы знать, каков различие (в случае когда существует) между первичными ключами и явным индексом как единственное (Примари Кеи vs Унике Индекс).

Как я вижу, оба заканчивают тем, что создают индекс на определенном поле, но я не знаю, если он затрагивает в чем-то результат (имея N количество данных), чтобы мочь консультировать данные.

CREATE UNIQUE INDEX Index ON dept (dname);

ALTER TABLE dept ADD CONSTRAINT Constraint PRIMARY KEY (dname);

В каком случае лучше использовать один или другой?

5
задан 25.10.2016, 16:25
2 ответа

Что единственный индекс?

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

  CREATE TABLE table1 (foo int, bar int);
  CREATE UNIQUE INDEX ux_table1_foo ON table1(foo);  -- Create unique index on foo.

  INSERT INTO table1 (foo, bar) VALUES (1, 2); -- OK
  INSERT INTO table1 (foo, bar) VALUES (2, 2); -- OK
  INSERT INTO table1 (foo, bar) VALUES (3, 1); -- OK
  INSERT INTO table1 (foo, bar) VALUES (1, 4); -- Fails!

  Duplicate entry '1' for key 'ux_table1_foo'

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

В MySQL единственное ограничение позволяет многообразные NULLS.

Возможно делать единственный индекс в многообразных колоннах.

Primary Key vs Унике Индекс

Вещи, которые являются тем же самым:

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

Вещи, которые различные:

  • Первичный ключ подразумевает также NOT NULL, но единственный индекс может быть недействительным.
  • Только может быть первичный ключ, но могут быть многообразные единственные индексы.
  • Если нет группируемого индекса, он определяется далее, главный ключ будет группируемым индексом.

Переведенный этого ответа StackOverflow на английском.

4
ответ дан 24.11.2019, 13:03
  • 1
    И для случая espec и # 237; fico Oracle? Эксплаин План заканчивает тем, что отличается? –  Angel Doza 19.10.2016, 17:34
  • 2
    для случая Oracle tambi и # 233; n держатся различия, ты можешь видеть эти ссылки ( соединил 1 и соединил 2) для м и # 225; s informaci и # 243; n. С другой стороны как он говорит @Byron я tambi и # 233; n я обычно использую primary key для подмостков и unique index для тех полей, которые я не хочу, чтобы они повторились, но смогли быть недействительными. –  Joacer 19.10.2016, 18:02
  • 3
    В этой точке: " S и # 243; это может быть первичный ключ, но не может быть м и # 250; ltiples и #237; ndices и #250; nicos. " он мне кажется, что не est и # 225; м и # 225; s, так как я предполагаю, что ты хочешь сказать именно противоположность. –  jachguate 19.10.2016, 18:12
  • 4
    @jachguate спасибо за заметку, я ошибся в traducci и # 243; n и мне проскользнул мимо этот не, сейчас я это издаю –  Joacer 19.10.2016, 18:15

Хотел знать cuÃ: l - различие (в случае когда существует) между первичными ключами и явным ¦-ndice как único ( Примари Кеи vs Унике Индекс ).

Оба дополняют друг друга, но Ваши главные цели отличные. Я объясняюсь...

Ключей (или constraints)

Главная цель ключа (или constraint) состоит в том, чтобы устанавливать restricci¦n относительно cuÃ: они данные таблица может соглашаться. В Oracle существуют несколько типов ключей (или constraints), между ними первичный ключ (primary key constraint) и ключ única (unique constraint, что не является тем же самым, что и unique index). В обоих случаях, он устанавливается, которого дублированная стоимость не принимается.

Различие между обоими состоит в том, что первичный ключ не принимает стоимость null, в то время как ключ única sà - принимает их. И другое различие состоит в том, что таблица только может определять единственный первичный ключ, в то время как ты можешь определять несколько ключей únicas.

Índices

En контраст, ¦-ndice (включая А-ндисес únicos) имеет как главная цель ускорять доступ к реестрам. Но в случае А-ндисес únicos, считает эффект второстепенным не позволения дублированной стоимости продолжая точно тот же контракт, что и ключ única.

В prÃ: ctica, нет действительно различия между ключом única (unique constraint) и А-ндисе único (unique index), и поэтому t¦-picamente многие запутывают их. Но строго говоря, это не та же вещь.

Â: CuÃ: l - relaci¦n между обоими?

¦-ndices - способ mÃ: s эффективный проверения, что esté уважая первичный ключ или única. Из-за этого же самого raz¦n, Oracle требует, чтобы первичный ключ или única он всегда шел acompañado ¦-ndice (обычно А-ндисе único, но это не всегда случай). Как уже pudistes замечать, определив первичный ключ, (или única), не ли находит Oracle ¦-ndice, подходящий для того, чтобы гарантировать уважение ключа, базы данных automÃ: ticamente добавляет соответствующий ¦-ndice (обычно А-ндисе único, но не всегда).

, Сказанный о другой форме, не возможно определять первичный ключ (или única) без того, чтобы он шел acompañado ¦-ndice. Но противоположное не является верным. ¦-ndice (único или не) не нужно, чтобы он пошел acompañado ключа.

Según я вижу, оба заканчивают тем, что создают ¦-ndice на определенном поле, но я не знаю, если он затрагивает в чем-то результат (имея N количество данных), чтобы мочь консультировать данные.

Из-за самого raz¦n, которого первичный ключ или única он не может существовать без соответствующего ¦-ndice, в конце концов, не имея значение cuÃ: l método используй, всегда ты beneficiarÃ: s результата, который предлагают ¦-ndices. Не habrÃ: отличись.

Â: В qué случай лучше использовать один или другой?

Это одинокое мой opini¦n, но в личном, состоя в том, что нет различия результата, когда говорится о том, чтобы определять cuÃ: l - главный идентификатор реестра или cuÃ: комбинации колонн не deber¦-an permitar дублированная стоимость, я предпочитаю использовать ключи (он главенствовал бы или únicas, primary key constraint или unique constraint). Для mÃ, - это сообщает лучше чувство того, чего я стараюсь добиваться. И c¦mo Oracle берется за то, чтобы добавлять соответствующий ¦-ndice, если он необходим, я не нуждаюсь в том, чтобы беспокоиться с этой добавочной деталью.

Только я беспокоюсь, добавочные ¦-ndices добавляют в таблицу, когда моя главная цель не состоит в том, чтобы определять правило или restricci¦n, а когда я хочу улучшить результат неких queries.

3
ответ дан 24.11.2019, 13:03