В чем разница между первичным ключом и ключом индекса - PullRequest
28 голосов
/ 21 марта 2011

Может кто-нибудь сказать мне, в чем разница между первичным ключом и ключом индекса. И когда использовать какой?

Ответы [ 3 ]

40 голосов
/ 21 марта 2011

Первичный ключ - это особый вид индекса, в котором:

  • может быть только один;
  • он не может быть обнуляемым;и
  • он должен быть уникальным.

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

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

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

15 голосов
/ 21 марта 2011

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

Индекс - это функция оптимизации производительностиэто позволяет быстрее получать доступ к данным.

Ключи часто являются хорошими кандидатами для индексации, и некоторые СУБД автоматически создают индексы для ключей, но это не обязательно так.

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

3 голосов
/ 26 марта 2013

Oracle Database обеспечивает ограничение целостности UNIQUE-ключа или PRIMARY KEY для таблицы, создавая уникальный индекс для уникального ключа или первичного ключа.Этот индекс автоматически создается базой данных, когда ограничение включено.

Вы можете явно создавать индексы (вне ограничений целостности), используя оператор SQL CREATE INDEX .

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

Используйте оператор CREATE UNIQUE INDEX для создания уникального индекса.

Указание индекса, связанного с ограничением

Если вам требуется более явный контроль над индексами, связанными с ограничениями UNIQUE and PRIMARY KEY , база данных позволяет вам:

1. Specify an existing index that the database is to use 
   to enforce the constraint
2. Specify a CREATE INDEX statement that the database is to use to create 
   the index and enforce the constraint

Эти параметры указываются с помощью предложения USING INDEX.

Пример:

 CREATE TABLE a (
 a1 INT PRIMARY KEY USING INDEX (create index ai on a (a1)));

http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm

...