Как заменить все непоследовательные идентификаторы GUID последовательными?

StackOverflow https://stackoverflow.com/questions/1017957

Вопрос

У меня есть база данных SQL Server 2005 с коричневыми полями, которая использует стандартные несортированные идентификаторы GUID в качестве большинства значений первичных ключей, а также в кластерных индексах (что отрицательно сказывается на производительности).

Как мне изменить их на последовательные идентификаторы GUID? Одной из проблем будет замена всех значений внешнего ключа при изменении каждого первичного ключа.

Известны ли вам какие-либо инструменты или сценарии для выполнения этого типа преобразования?

Это было полезно?

Решение

помните, что вы можете использовать только функцию newsequentialid () по умолчанию

, поэтому создайте новую таблицу с 2 столбцами. Вставьте ключ от вашей исходной таблицы в эту (оставьте другой столбец заполненным)

присоединитесь к исходной таблице и обновите PK с помощью newsequantialid, если у вас есть каскадное обновление, FK должны обновить сами

Другие советы

Откуда ты знаешь, что это плохо для производительности?

Преимущество идентификаторов GUID заключается в том, что вам не нужно беспокоиться о нескольких процессах, создающих записи одновременно. Это может значительно упростить ваш код, в зависимости от программы.

SequentialGuids лучше всего работают, когда Guid - это PK. Это причина их существования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top