У нас есть база данных с 500 + таблицы, в которых почти все таблицы имеют кластеризованный PK, который имеет гуид типа данных (uniqueidentifier).
Мы находимся в процессе тестирования переключателя от "нормальных" "случайных" гуидов, сгенерированных через.NETs Гуид. NewGuid () метод к последовательным гуидам, сгенерированным через NHibernate guid.comb алгоритм. Это, кажется, работает хорошо, но что относительно клиентов, которые уже имеют миллионы строк со "случайными" значениями первичного ключа?
Заранее спасибо за любые указатели на этом.
Это зависит от того, сгруппированы ли таблицы по первичному индексу или по другому индексу. Например, если вы создаете большое количество новых записей в таблице с идентификатором GUID PK и датой создания, обычно имеет смысл выполнить кластеризацию по дате создания, чтобы оптимизировать операцию вставки.
С другой стороны, в зависимости от выполняемых запросов, кластер по GUID может быть лучше, и в этом случае использование последовательных GUID может помочь с производительностью вставки. Я бы сказал, что невозможно дать окончательный ответ на ваш вопрос без глубоких знаний об использовании.
Вы могли бы это сделать, но я не уверен, что вам захочется. Я не вижу каких-либо преимуществ в использовании последовательных руководств, на самом деле использование руководств не рекомендуется в качестве первичного ключа, если нет причин, связанных с распределением / репликацией. Вы используете кластерный индекс?
Однако, если вы продолжите, я рекомендую сначала загрузить таблицу со значениями из вашего алгоритма.
У вас будут проблемы с внешними ключами. Вам нужно будет связать старый и новый направляющие в упомянутой таблице, отбросить внешние ключи, выполнить транзакционное обновление, а затем повторно применить внешние ключи.
Я не думаю, что это того стоит, если только вы не отказались от руководств в целом, чтобы сказать систему, основанную на целых числах.