Кластерный / некластеризованный индекс по столбцу уникальных идентификаторов в SQL Server - PullRequest
4 голосов
/ 04 мая 2009

Я прочитал различные вопросы / ответы здесь, которые в основном указывают на то, что кластерный индекс в столбце уникального идентификатора является плохим выбором по соображениям производительности. Несмотря на это, мне нужно использовать uniqueidentifier в качестве моего первичного ключа, и я НЕ хочу использовать newsequentialid (), потому что сгенерированные значения слишком похожи друг на друга (мне нужно больше случайных идентификаторов, чтобы пользователи не могли [разумно] «угадать» другой идентификатор).

Итак, как лучше всего индексировать этот ПК? Хотя кластеризованный индекс в этом столбце не идеален, лучше ли он, чем «уникальный некластеризованный» индекс?

Я использую SQL Server 2005.

1 Ответ

9 голосов
/ 04 мая 2009

Прежде всего, если вы пытаетесь использовать NEWID() для достижения случайности (больше, чем просто случайный взгляд), у вас проблемы.

Обычно это далеко не идеальный выбор, потому что другие индексы будут ссылаться на ключ кластеризованного индекса, а длинный ключ кластеризованного индекса будет ухудшать производительность всех индексов. Вы можете создать целочисленный столбец IDENTITY, сделать его кластеризованным индексом и просто создать некластеризованный уникальный индекс для столбца uniqueidentifier.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...