По-разному. Коэффициент заполнения зависит от страницы, поэтому, если страница заполнена, тогда да. Все последующие вставки приведут к переупорядочению, если страница, в которую нужно вставить, заполнена.

отаю над стандартами базы данных для новой базы данных, которую начинает моя компания. Одна из вещей, которую мы пытаемся определить, - это правила первичного ключа и кластерного индекса по отношению к уникальным идентификаторам.

(ПРИМЕЧАНИЕ. Я не хочу обсуждать плюсы и минусы использования UniqueIdentifier в качестве первичного ключа или кластерного индекса. В Интернете имеется масса информации об этом.не это обсуждение.)

Итак, вот сценарий, который меня беспокоит:

Скажем, у меня есть таблица с UniqueIdentifier в качестве кластерного индекса и первичного ключа. Давайте назовем это ColA. Я установил значение по умолчанию для ColA, чтобы быть NewSequentialId ().

Используя этот NewSequentialId (), я вставляю три последовательных строки:

{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3-440D-A9FE-CC7988DDF067}

Затем я перезагружаю свой сервер.документы для NewSequentialId говорят, что «после перезапуска Windows GUID может начаться снова с более низкого диапазона, но все еще остается глобально уникальным».

Таким образом, следующая начальная точка может быть ниже, чем предыдущий диапазон.

Поэтому после перезагрузки я вставляю еще 3 значения:

{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-4645-ABA9-B098D2003E66}

(Я не уверен точно, как guid представлен в базе данных, но давайте предположим, поскольку этот начинается с 3, а предыдущие начинаются с 7, что 3 "меньше", чем 7.)

Когда вы делаете вставку, которая находится в середине кластерного индекса, должно произойти переопределение индекса. (По крайней мере, так сказал мне мой администратор базы данных.) И каждый раз, когда я перезагружаюсь, я рискую, чтобы мой новый диапазон UniqueIdentifier оказался в середине других предыдущих диапазонов.

Итак, мой вопрос: поскольку следующий набор UniqueIdentifiers будет меньше, чем последний набор, будет ли каждая вставка приводить к перемешиванию моего кластерного индекса?

А если нет, то почему? SQL Server знает, что я использую NewSequentialId? Это как-то компенсирует это?

Если нет, то как он узнает, что я вставлю дальше? Может быть, следующий миллион вставок начнется с 3. Или, может быть, они начнутся с 7. Как он узнает?

Или не знает и просто держит все в порядке. Если это так, то одна перезагрузка может сильно повлиять на производительность. (Что заставляет меня думать, что мне нужен мой собственный NewSequentialId, на который не влияют перезагрузки.) Это правильно? Или есть какая-то магия, о которой я не знаю?

РЕДАКТИРОВАТЬ: GUID как кластеризованный индекс настоятельно не рекомендуется в моем стандарте. Как я уже говорил выше, есть много причин, по которым это плохая идея. Я пытаюсь выяснить, если это еще одна причина, почему.

Ответы на вопрос(1)

Ваш ответ на вопрос