ИСПОЛЬЗОВАНИЕ Guid как PK в SQL Server 2014 - PullRequest
0 голосов
/ 06 сентября 2018

Добрый вечер,

Мы импортируем данные из сервисного центра. Входящие ключи имеют идентификатор GUID, однако база данных настроена на использование столбца в качестве nvarchar (), тем не менее время запроса может быть чрезвычайно медленным при соединении столбцов sysid с другими таблицами (также хранится как nvarchar (), но без нарисованных связей).

Если я не выполняю интенсивную индексацию, большинство отчетов работают медленно или никогда не возвращают никаких результатов. Я не хочу переоценивать базу данных и рисковать нехваткой места. Желательно ли преобразовать столбцы nvarchar в guid во всех таблицах? это сломается? (загруженный вопрос)

Спасибо.

1 Ответ

0 голосов
/ 06 сентября 2018

Это зависит.

Изменение типа с nvarchar на GUID должно уменьшить размер индекса под первичным ключом (так как вы устраните необходимость в UNICODE), но без знания того, какие другие индексы у вас есть, сложно измерить влияние на производительность. Тем не менее, в целом, рекомендуется, чтобы ваш тип соответствовал вашим данным.

Обратите внимание, что если PK кластеризован (что является настройкой по умолчанию), каждый последующий индекс будет включать столбец. Чем уже кластерный индекс, тем уже последующие индексы. Кроме того, кластеризация по GUID может привести к сильной фрагментации ВСЕХ индексов (если GUID не последовательный). Прежде чем начать вносить изменения, вы можете убедиться, что у вас есть обслуживание, чтобы уменьшить фрагментацию и обновлять статистику по мере необходимости.

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

...