Подтвердить что ты не робот

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

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

В чем их отличия и что лучше?

4b9b3361

Ответ 1

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

  • В таблице может быть только один первичный ключ, и за очень небольшим исключением каждая таблица должна иметь один.
  • Первичный ключ неявно UNIQUE - вы не можете иметь более одной строки с тем же самым первичным ключом, поскольку его цель - однозначно идентифицировать строки.
  • Первичный ключ никогда не может быть NULL, поэтому строка (ы), в которую он состоит, должна быть NOT NULL

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

  • Чтобы обеспечить ограничение uniquness (они могут быть созданы неявно, когда вы объявляете столбец UNIQUE)
  • Чтобы повысить производительность. Сравнения для равенства или "больше/меньше" в предложениях WHERE, а также JOINs намного быстрее в столбцах с индексом. Но обратите внимание, что каждый индекс снижает производительность обновления/вставки/удаления, поэтому вы должны иметь их только там, где они действительно нужны.

Ответ 2

Различия

В таблице может быть только один первичный ключ, но несколько индексов.

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

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

Когда использовать

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

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

Что лучше?

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

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

Добавьте индексы с помощью личного опыта, или если производительность уменьшается. Измените разницу, и если вы работаете с SQL Server, узнаете, как читать планы выполнения.

Ответ 3

Это может помочь Вернуться к основанию: разница между Первичным ключом и уникальным индексом

Различия между ними:

  • Столбец (столбцы), которые делают основной ключ таблицы не равным NULL, поскольку по определению первичный ключ не может быть NULL, поскольку он помогает однозначно идентифицировать запись в таблице. Столбец (столбцы), которые составляют уникальный индекс, может быть нулевым. Следует отметить, что разные RDBMS относятся к этому по-другому → в то время как SQL Server и DB2 не допускают более одного значения NULL в уникальном столбце индекса, Oracle допускает несколько значений NULL. Это одна из тех вещей, которые нужно учитывать при разработке/разработке/переносе приложений в РСУБД.
  • В таблице может быть только один первичный ключ, который может содержать множество уникальных индексов, определенных в таблице (если необходимо).
  • Кроме того, в случае SQL Server, если вы используете параметры по умолчанию, первичный ключ создается как кластеризованный индекс, а уникальный индекс (ограничение) создается как некластеризованный индекс. Это просто поведение по умолчанию, хотя и может быть изменено во время создания, если это необходимо.

Ответ 4

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

Различие между ними иногда размывается, потому что для определения ограничений и индексов часто используется аналогичный или идентичный синтаксис. Многие СУБД будут создавать индекс по умолчанию при создании ключевых ограничений. Потенциал путаницы между ключом и индексом является неудачным, поскольку разделение логических и физических проблем является очень важным аспектом управления данными.

Что касается "первичных" ключей. Они не являются "особым" типом ключа. Первичный ключ - это всего лишь один ключ-кандидат таблицы. Существует как минимум два способа создания ключей-кандидатов в большинстве СУБД SQL, и это либо ограничение PRIMARY KEY, либо ограничение UNIQUE на столбцах NOT NULL. Очень распространено мнение, что каждая таблица SQL имеет ограничение PRIMARY KEY. Использование ограничения PRIMARY KEY - это обычная мудрость и совершенно разумная вещь, но обычно это не делает практической или логической разницы, потому что большинство СУБД рассматривают все ключи как равные. Разумеется, каждая таблица должна обеспечивать, по крайней мере, один ключ-кандидат, но зависит ли тот или иной ключ от ограничений PRIMARY KEY или UNIQUE, как правило, неважно. В принципе это ключи-кандидаты, которые важны, а не "первичные" ключи.

Ответ 5

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

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

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

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

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