Кластерный / некластеризованный индекс по столбцу уникальных идентификаторов в SQL Server
-
03-07-2019 - |
Вопрос
Я прочитал различные вопросы / ответы здесь, которые в основном указывают на то, что кластерный индекс в столбце uniqueidentifier является плохим выбором по соображениям производительности. В любом случае, мне нужно использовать uniqueidentifier в качестве моего первичного ключа, и я НЕ хочу использовать newsequentialid (), потому что сгенерированные значения слишком похожи друг на друга (мне нужно больше случайных идентификаторов, чтобы пользователи не могли [разумно] «угадать» другой идентификатор).
Итак, как лучше всего индексировать этот ПК? Хотя кластеризованный индекс в этом столбце не идеален, он лучше, чем «уникальный, некластеризованный» индекс?
Я использую SQL Server 2005.
Решение
Прежде всего, если вы пытаетесь использовать NEWID ()
для достижения случайности (больше, чем просто случайный взгляд), у вас проблемы.
Обычно это не совсем идеальный выбор, потому что другие индексы будут ссылаться на ключ кластеризованного индекса, а длинный ключ кластеризованного индекса будет ухудшать производительность всех индексов. Вы можете создать целочисленный столбец IDENTITY
, сделать его кластеризованным индексом и просто создать некластеризованный уникальный индекс для столбца uniqueidentifier
.