Как заменить все непоследовательные идентификаторы GUID последовательными?
-
06-07-2019 - |
Вопрос
У меня есть база данных SQL Server 2005 с коричневыми полями, которая использует стандартные несортированные идентификаторы GUID в качестве большинства значений первичных ключей, а также в кластерных индексах (что отрицательно сказывается на производительности). Р>
Как мне изменить их на последовательные идентификаторы GUID? Одной из проблем будет замена всех значений внешнего ключа при изменении каждого первичного ключа. Р>
Известны ли вам какие-либо инструменты или сценарии для выполнения этого типа преобразования?
Решение
помните, что вы можете использовать только функцию newsequentialid () по умолчанию
, поэтому создайте новую таблицу с 2 столбцами. Вставьте ключ от вашей исходной таблицы в эту (оставьте другой столбец заполненным)
присоединитесь к исходной таблице и обновите PK с помощью newsequantialid, если у вас есть каскадное обновление, FK должны обновить сами
Другие советы
Откуда ты знаешь, что это плохо для производительности?
Преимущество идентификаторов GUID заключается в том, что вам не нужно беспокоиться о нескольких процессах, создающих записи одновременно. Это может значительно упростить ваш код, в зависимости от программы.
SequentialGuids лучше всего работают, когда Guid - это PK. Это причина их существования.