Есть ли .NET, эквивалентный SQL Server newsequentialid () - PullRequest
31 голосов
/ 17 октября 2008

Мы используем Guid для первичного ключа, который, как вы знаете, кластеризован по умолчанию.

При вставке новой строки в таблицу она вставляется на случайную страницу в таблице (потому что Guid-ы являются случайными). Это оказывает ощутимое влияние на производительность, поскольку БД постоянно разделяет страницы данных (фрагментация). Но главная причина, по которой я использую последовательный Guid, заключается в том, что я хочу, чтобы новые строки вставлялись как последняя строка в таблицу ... что поможет при отладке.

Я могу создать кластеризованный индекс для CreateDate, но наша БД генерируется автоматически, и в процессе разработки нам нужно сделать что-то дополнительное, чтобы облегчить это. Также CreateDate не является хорошим кандидатом для кластерного индекса.

Раньше я использовал Jimmy Nielsons COMB's , но мне было интересно, есть ли что-то в .NET Framework для этого. В SQL 2005 Microsoft представила newsequentialid () в качестве альтернативы newid (), поэтому я надеялся, что они сделали эквивалент .NET, потому что мы генерируем идентификатор в коде.

PS: Пожалуйста, не начинайте обсуждать, правильно это или нет, потому что GUID должен быть уникальным и т. Д.

Ответы [ 11 ]

0 голосов
/ 17 октября 2008

Ключевой проблемой является знание того, какое последнее значение было в приложении .NET. SQL Server отслеживает это для вас. Вам нужно будет сохранить последнее значение самостоятельно и использовать конструктор Guid с байтовым массивом, содержащим следующее значение. Конечно, в распределенном приложении это, вероятно, не поможет, и вам, возможно, придется использовать рандомизированные руководства. (Не то чтобы я не видел в этом ничего плохого.)

http://msdn.microsoft.com/en-us/library/90ck37x3.aspx

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