У меня есть таблица с составным первичным ключом (состоящим из 4 столбцов), который используется для того, чтобы в таблицу не вводились дубликаты. Теперь мне нужна новая таблица, которая должна ссылаться на ключи в этой таблице как на внешние ключи.
Мой вопрос в том, какой подход более эффективен для скорости поиска:
1) Создать ли новую таблицу, включающую все 4 столбца, и ссылаться на них во внешнем ключе.
или
2) Создать ли новый столбец идентификаторов в таблице первичного ключа и использовать его в качестве внешнего ключа в новой таблице.
Предполагается, что эта база данных будет содержать очень большой объем данных, поэтому я создал ее до сих пор с целью минимизации объема данных, содержащихся в каждой таблице. Имея это в виду, вариант 2 будет лучшим подходом, так как я буду сохранять 2 столбца int и столбец datetime для каждой строки, но я хочу избежать увеличения времени поиска, если в этом нет необходимости.
INT IDENTITY
) в таком случае - сделать ссылки на эту таблицу и присоединиться к ней просто так намного проще. Чтобы избежать дублирования, наложите уникальное ограничение на эти четыре столбца. Кроме того: узкие первичные ключи намного лучше по соображениям производительности (если они используются в качестве ключа кластеризации)Ответы:
Стоимость использования простого синтетического целого числа PK невелика, и выгода в вашем случае, вероятно, будет довольно значительной.
Единственный существенный недостаток, который приходит на ум, - это то, что вы можете потерять производительность по запросам, которые выиграли от кластеризации на композитном ПК. Если вы считаете, что это может быть значительным, продолжайте кластеризацию по составному ключу-кандидату, но поместите PK в синтетический ключ.
источник
Как это часто бывает в мире SQL, ответ таков: «Это зависит».
Посмотрите на этот вопрос для некоторых указателей: обеспечивают ли естественные ключи более высокую или более низкую производительность в SQL Server, чем суррогатные целочисленные ключи?
В некоторых случаях наблюдается улучшение производительности при использовании естественных ключей в качестве внешних ключей. Тем не менее, в большинстве случаев лучше использовать меньшие ключи (читай: суррогатные ключи).
Если вы введете этот столбец IDENTITY, я бы даже сделал его Первичным ключом и заменил бы «естественные» столбцы на UNIQUE CONSTRAINT.
источник