ПРИМЕЧАНИЕ. Этот ответ касается разработки корпоративного класса. в целом .
Это проблема СУБД, а не только SQL Server, и ее поведение может быть очень интересным. Во-первых, хотя первичные ключи обычно индексируются автоматически (однозначно), это НЕ является абсолютным. Бывают случаи, когда важно, чтобы первичный ключ НЕ индексировался однозначно.
В большинстве СУБД уникальный индекс будет автоматически создан на основе первичного ключа. если он еще не существует. . Следовательно, вы можете создать свой собственный индекс в столбце первичного ключа, прежде чем объявлять его первичным ключом, тогда этот индекс будет использоваться (если приемлемо) ядром базы данных при применении объявления первичного ключа. Часто вы можете создать первичный ключ и разрешить создание его уникального индекса по умолчанию, затем создать свой собственный альтернативный индекс для этого столбца, а затем отбросить индекс по умолчанию.
Теперь самое интересное - когда вам НЕ нужен уникальный индекс первичного ключа? Вы не хотите и терпеть не можете, когда ваша таблица получает достаточно данных (строк), чтобы сделать обслуживание индекса слишком дорогим. Это зависит от оборудования, механизма СУБД, характеристик таблицы и базы данных, а также от загрузки системы. Однако обычно он начинает проявляться, когда таблица достигает нескольких миллионов строк.
Существенная проблема заключается в том, что каждая вставка строки или обновление столбца первичного ключа приводит к сканированию индекса для обеспечения уникальности. Это уникальное сканирование индекса (или его эквивалент в любой СУБД) становится намного дороже по мере роста таблицы, пока не станет доминировать над производительностью таблицы.
Я много раз сталкивался с этой проблемой с таблицами размером до двух миллиардов строк, 8 ТБ памяти и 40 миллионами вставок строк в день. Мне было поручено перепроектировать задействованную систему, что включало удаление уникального индекса первичного ключа практически в качестве первого шага. Действительно, снижение этого индекса было необходимо в производственной среде просто для восстановления после простоя, прежде чем мы даже приблизились к редизайну. Этот редизайн включал поиск других способов гарантировать уникальность первичного ключа и обеспечить быстрый доступ к данным.