Эффективность комбинированного первичного ключа в качестве внешнего ключа

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

Мой вопрос: какой подход более эффективен для скорости поиска:

1) Я создаю новую таблицу, включая все 4 столбца, и ссылаюсь на все их в внешнем ключе.

или

2) Создать новый столбец идентификаторов в таблице первичного ключа и использовать его в качестве внешнего ключа в новой таблице.

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

12 голосов | спросил aaroncatlin 3 +04002013-10-03T17:58:21+04:00312013bEurope/MoscowThu, 03 Oct 2013 17:58:21 +0400 2013, 17:58:21

2 ответа


10

Стоимость использования простого синтетического целочисленного PK мала, и преимущество в вашем случае, вероятно, будет довольно значительным.

  • Как вы заметили, у вас будет гораздо более простое отношение FK.
  • Небольшой PK делает для небольших (и быстрых) индексов. Ваше общее табличное пространство, вероятно, будет уменьшено путем добавления такого столбца.
  • Если бизнес-правила когда-либо изменяются, вам не придется переупорядочивать таблицу.

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

ответил Jon of All Trades 3 +04002013-10-03T18:32:30+04:00312013bEurope/MoscowThu, 03 Oct 2013 18:32:30 +0400 2013, 18:32:30
4

Как часто в мире SQL, ответ: «Это зависит».

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

Есть случаи, когда вы видите улучшение производительности при использовании естественных ключей в качестве внешних ключей. Однако в большинстве случаев вам будет лучше с меньшими клавишами (читай: суррогатные ключи).

Если вы введете этот столбец IDENTITY, я бы даже сделал его Первичным ключом и изменил бы «естественные» столбцы вместо UNIQUE CONSTRAINT.

ответил Sebastian Meine 3 +04002013-10-03T18:20:37+04:00312013bEurope/MoscowThu, 03 Oct 2013 18:20:37 +0400 2013, 18:20:37

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132