Разница между ключом, первичным ключом, уникальным ключом и индексом в MySQL - PullRequest
231 голосов
/ 02 октября 2010

Когда я должен использовать KEY, PRIMARY KEY, UNIQUE KEY и INDEX?

Ответы [ 8 ]

281 голосов
/ 02 октября 2010

KEY и INDEX являются синонимами в MySQL.Они имеют в виду одно и то же.В базах данных вы должны использовать indexes для повышения скорости поиска данных.Индекс обычно создается для столбцов, используемых в предложениях JOIN, WHERE и ORDER BY.

Представьте, что у вас есть таблица с именем users, и вы хотите найти всех пользователей с фамилией «Смит».Без индекса база данных должна была бы пройти через все записи таблицы: это медленно, потому что чем больше записей в вашей базе данных, тем больше нужно сделать, чтобы найти результат.С другой стороны, индекс поможет базе данных быстро перейти к соответствующим страницам, где хранятся записи «Смита».Это очень похоже на то, как мы, люди, просматриваем каталог телефонной книги, чтобы найти кого-то по фамилии: мы не начинаем поиск по каталогу от обложки к обложке, пока мы вставляем информацию в некотором порядке, который мы можемиспользуйте для быстрого перехода к страницам «S».

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

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

53 голосов
/ 02 октября 2010

KEY и INDEX являются синонимами.

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

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

ПЕРВИЧНЫЙ КЛЮЧ является одновременно уникальным ограничением, а также подразумевает, что столбец НЕ НЕДЕЙСТВИТЕЛЕН. Он используется для идентификации каждого ряда. Это может быть полезно для объединения с другой таблицей через ограничение внешнего ключа. Хотя для таблицы необязательно иметь ПЕРВИЧНЫЙ КЛЮЧ, обычно это хорошая идея.

41 голосов
/ 22 ноября 2012

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

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

16 голосов
/ 02 октября 2010

PRIMARY KEY И UNIQUE KEY похожи, за исключением того, что они имеют разные функции.Первичный ключ делает строку таблицы уникальной (т. Е. Не может быть двух строк с одинаковым ключом).В таблице базы данных может быть только 1 первичный ключ.

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

INDEX также создает уникальность.MySQL (пример) создаст таблицу индексации для столбца, который индексируется.Таким образом, легче получить значение строки таблицы, когда запрос запрашивается в этом столбце индексированной таблицы.Недостатком является то, что если вы делаете много обновлений / удалений / создания, MySQL должен управлять таблицами индексации (и это может быть узким местом производительности).

Надеюсь, это поможет.

10 голосов
/ 02 октября 2010

Уникальные ключи: столбцы, в которых нет двух одинаковых строк

Первичный ключ: набор минимального количества столбцов, которые могут однозначно идентифицировать каждую строку в таблице (т. Е. Нет двух одинаковых строк во всех столбцах, составляющих первичный ключ). В таблице может быть несколько первичных ключей. Если существует уникальный ключ, то это первичный ключ (а не первичный ключ) в таблице. Если уникального ключа не существует, потребуется несколько значений столбца, чтобы идентифицировать строку, например (first_name, last_name, Father_name, mother_name), которые в некоторых таблицах могут представлять собой первичный ключ.

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

7 голосов
/ 03 ноября 2012

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

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

5 голосов
/ 20 марта 2013

Первичный ключ используется для работы с разными таблицами.Это основа реляционных баз данных.Если у вас есть база данных книг, лучше создать 2 таблицы - 1) книги и 2) авторов с первичным ключом INT "id".Тогда вы используете идентификатор в книгах вместо имени автора.

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

2 голосов
/ 18 апреля 2016

Уникальный ключ:

  1. Более одного значения может быть нулевым.
  2. Никакие два кортежа не могут иметь одинаковые значения в уникальном ключе.
  3. Один или несколько уникальных ключей могут быть объединены в первичный ключ, но не наоборот.

Первичный ключ

  1. Может содержать более одного уникального ключа.
  2. Уникально представляет кортеж.
...