Нарушение производительности T-SQL при использовании UNIQUEIDENTIFIER против INT - PullRequest
0 голосов
/ 24 февраля 2012

Если бы мне нужно было безошибочно идентифицировать строки в таблице базы данных T-SQL, я бы установил их как:

[id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY

Но если мне нужно, чтобы идентификатор был уникальным среди нескольких баз данных (на разных компьютерах), я бы пошелс помощью:

[uid] UNIQUEIDENTIFIER NOT NULL

и затем установите индекс для этого столбца:

CREATE INDEX index_name ON [TableName] ([uid]);

Так что мне было интересно, какой удар по производительности получит база данных, изменив INT на UNIQUEIDENTIFIER?

1 Ответ

5 голосов
/ 24 февраля 2012

GUID - не единственная опция, позволяющая суррогатным значениям быть уникальными в разных базах данных.Сразу приходят на ум два варианта:

  1. Создайте свое собственное хеширование.Используйте BIGINT и задайте начальное число идентификаторов для каждой базы данных, начиная, скажем, с 1000000000 в базе данных A, 2000000000 в базе данных B и т. Д. Это поддерживает много-много баз данных.
  2. Имеет генератор центральной последовательности, которыйпросто поднимает центральный столбец идентификаторов и возвращает новый идентификатор для использования во вставке.Масштаб и параллелизм могут быть здесь более важным фактором, но я подозреваю, что только на верхнем уровне.

В SQL Server 2012 вы сможете реализовать (2) намного проще, используя ПОСЛЕДОВАТЕЛЬНОСТЬ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...