(SQL Server) Почему GUID или другое случайное значение в качестве ключа старшего порядка вызовет фрагментацию? - PullRequest
2 голосов
/ 11 февраля 2011

Я смотрю видео фрагментации индекса Пола Рэндала на здесь .В видео Павел сказал, что GUID or other random values as high-order key will cause page splits which in turn will cause index fragmentation.Причина в том, что случайные значения означают, что новые записи будут вставлены в случайные страницы, что, вероятно, приведет к разделению страницы на случайную страницу.Мой вопрос: если новые записи не вставляются в случайные страницы, разделение страниц все еще может произойти, верно?Если это правда, в чем разница между этими двумя случаями?

Кстати, означает ли ключ старшего разряда primary key?Я не являюсь носителем английского языка и не уверен в этом.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Данные индекса сгруппированы по используемым ключам. Здесь упоминается «старший порядок», поскольку индексы могут быть составными, а первый элемент является наиболее значимым для заказа.

Так что, если этот член является случайным (и GUID должен рассматриваться как случайный, даже если крипто-парням не нравится этот термин для GUID), вы получите гораздо более частые разбиения, чем если вы вставите последовательные значения, даже если значения не находятся в конце диапазона.

(именно поэтому использование NEWSEQUENTIALID() вместо NEWID() очень помогает для производительности вставки при использовании GUID для кластеризованного первичного ключа).

1 голос
/ 11 февраля 2011

Если ваши ключи последовательные, тогда все данные будут добавлены в конце, то есть новые страницы будут созданы по мере необходимости.Это, однако, создаст «горячую точку», в которой данные передаются в систему большого объема.Решение этой проблемы заключается в том, чтобы кластеризовать индекс по какому-либо полю классификации, а затем увеличить первичный ключ.

...