2010-02-01 1 views
1

Имеет ли столбец первичного ключа значение индекса в этом столбце? Если да, то какой это индекс?Есть ли индекс первичного ключа таблицы?

+2

Какой сервер БД? – SLaks

+0

Я использую SQL Server 2008 – Shayan

+0

Пожалуйста, проверьте эту статью http://stackoverflow.com/questions/462477/sql-primary-key-and-index – madatanic

ответ

7

Для SQL Server, который, как я считаю, из предыдущих вопросов является тем, что вы используете, когда вы определяете PRIMARY KEY, он автоматически будет иметь индекс в этом столбце, который по умолчанию будет индексом CLUSTERED. Вы можете определить, должен ли он быть индексом NONCLUSTERED или CLUSTERED при создании ограничения.

+0

+1 и FYI для OP: индексы не покрываются ANSI, хотя MySQL и SQL Server используют ту же терминологию. Oracle не различает - это просто индексы. Также re: SQL Server - кластерный индекс создается по умолчанию при определении первичного ключа, но кластерный индекс может быть изменен для связывания других столбцов (столбцов) в таблице. –

2

Это зависит от базы данных.

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

Какую базу вы используете?

EDIT:

  • SQLServer (версии 7 - 2008) создает индексы или первичные ключи - вы можете контролировать, будет ли она или нет кластерным.
  • Старые версии Oracle (8i, 9i) также создают индексы при добавлении уникального ограничения ключа. Более новые версии (10g), похоже, не основаны на тестовом примере, на который я только что посмотрел.
+0

SQL Server 2008 – Shayan

1

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

4

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

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

+0

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

+1

Вы можете создать некластеризованный первичный ключ, используя ключевое слово 'nonclustered', см. Http://msdn.microsoft.com/en-us/library/aa258255(SQL.80).aspx – Andomar

1

Во всех БД, которые я использовал, PRIMARY KEY - это в основном просто УНИКАЛЬНЫЙ индекс.

+0

Я думаю, что это в основном правильно. Итак, +1, чтобы компенсировать необъяснимое понижение: – Andomar

+0

LOL, спасибо Andomar! –

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

  • Нет связанных вопросов^_^