В базе данных какая разница между ключом и индексом?

например, в SQLServer, если у меня есть индекс с "уникальным" набором на нем, как это отличается от ключа?

Как узнать, когда я хочу использовать ключ против индексированного поля?

10 ответов


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


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

Как многие упоминают, индекс реализован с помощью b-деревьев. Однако это только деталь реализации. Существует множество способов реализации индекса.


ключ однозначно идентифицирует строку в таблице. Индекс-это порядок строк в таблице. Таблица может иметь несколько индексов, потому что индекс может быть только определенным порядком полей набора, которые система использует для поиска, а затем ищет фактическую строку. Технически, может быть только один ключ используется для идентификации строк. В большинстве случаев это также основной индекс, но это не обязательно.


ключ (объявление) является ограничением. Это предотвращает ввод строк в таблицу, если какие-либо ключевые данные отсутствуют или если ключевые данные дублируют строку, которая уже находится в таблице.

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

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

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


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


ключ должен быть уникальным идентификатором бизнес-модели для строки. Уникально индексированный столбец можно считать "альтернативным ключом"."Обычно SQL-серверы автоматически создают уникальный индекс для первичных ключей.

Я также должен упомянуть, что вы можете индексировать не уникальные столбцы; такие индексы используются для ускорения запросов по индексированным столбцам.


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


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

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

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

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


ключ всегда будет иметь индекс за кадром При создании первичного ключа SQL Server создаст кластеризованный уникальный индекс для поддержки этого

даже при создании уникального ограничения SQL Server также создаст индекс

и, конечно, разница между уникальным ограничением и первичным ключом заключается в том, что уникальное ограничение позволяет по крайней мере 1 нулевое значение (1 на sql server более одного на Oracle) У вас может быть только 1 первичный ключ и много (249 на sql server) уникальные ограничения для таблицы


ключ имеет по умолчанию индекс кластера в MS SQL Server.

Key-уникальное значение для каждой строки.

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

  • растровые индекс
  • плотная индекс
  • разреженный индекс
  • Индекс Покрытия