2009-06-23 4 views
1

У меня есть база данных SQL с набором таблиц с уникальными идентификаторами. В течение самого долгого времени я использую уникальный тип данных Identifier и передаю в guid из моего интерфейса C#. Однако с целью ускорения при запросе я решил переключиться на использование bigint и пройти в течение длительного времени.Создать C# Long Unique ID

Самый простой способ создания уникальных длин каждый раз, когда я запускаю код, чтобы не было дублирования идентификатора?

ответ

4

Единственный способ гарантировать, что bigint является уникальным в таблице базы данных, это позволить SQL Server генерировать его для вас - сделать его столбцом IDENTITY.

Действительно ли вы измеряли производительность с помощью уникального идентификатора и находили его слишком медленным?

+0

Нет, но верно поле, хранящее идентификатор значения 3h38d9383-3j394juj93-3jd309d и т. Д., Было бы намного медленнее, чем просто одно целое число, которое увеличивается от 1 до 1000000 и т. Д. – Goober

+0

Мы в прошлом находили, что даже для относительно небольших объемов данных (например, от 50 до 100 тыс. записей) он может быть жестоко медленным. – kemiller2002

+0

@Goober: Гид также является единственным целым числом, он только больше. – Guffa

0

Существуют и другие варианты генерации уникальных чисел, кроме семян. Одна из возможностей - создать число, основанное на времени, что-то вроде тиков, или лучше вычислить количество секунд с начала 2009 года. Затем добавьте уникальную цифру на основе местоположения (или учетной записи, если вы не делаете это на сервере) номер был создан до конца номера (наименьшая значащая цифра).

Так что, если ваш новый уникальный номер был создан на сервере приложений 1 и это было Ид 42, и это было 4000 секунд с начала 2009 года, новый идентификатор будет 400042. Следующей один генерироваться может быть 400942, и один, сгенерированный с другого сервера точно в одно и то же время, может быть 400943.

1

Если скорость является проблемой, вы можете получить улучшения запроса, используя уникальный идентификатор, генерируя его с помощью функции newsequantialID(), а не newID(). Новый метод генерирует последовательные уникальные идентификаторы

0

Где вы видите замедление? Запрос или Вставка/Обновление? Я спрашиваю, потому что GUID в качестве первичных ключей не очень хорош для вставки/обновления, потому что они не являются последовательными, как IDENTITY, и могут вызвать некоторые измельчения в кластерном индексе ключа. Но SQLServer теперь имеет последовательные команды, которые разрешают это. Я много слышал об использовании GUID, поскольку клавиши были медленными, но мне интересно, насколько это действительно так. Особенно на 64-битных машинах - сравнивает 128-битные числа на самом деле намного медленнее, чем сравнение 64 или даже 32-битных чисел?