Почему Guid.ToString () меняет порядок байтов?

Мы храним некоторые Guid в базе данных MS SQL. Есть некоторый устаревший код, который делает, Guid.ToString()а затем передает их в a, varchar(64)и есть более новый код, который передает их с помощью параметра уникального идентификатора. Когда вы смотрите на результаты, используя MS SQL Management studio, они выглядят по-разному. Порядок байтов первых трех блоков меняется на обратный, но последний остается неизменным. Почему?

20.08.2008 09:44:02
1 ОТВЕТ
РЕШЕНИЕ

Поля уникального идентификатора на сервере Sql могут быть проиндексированы, как и «назад».

Направляющие могут быть сгенерированы как из конкретной информации о машине, так и из информации о времени события.

Guid по умолчанию в .Net является случайным, но из него можно получить последовательные Guid с помощью внешнего вызова:

[DllImport( "rpcrt4.dll", SetLastError = true )]
static extern int UuidCreateSequential( out Guid guid );

Это позволит вам получить Guids на основе вашего MAC-адреса ( документы MSDN ), которые являются последовательными.

Если вы используете .ToString()эти последовательные направляющие, то увидите, что первая часть строки меняется, а остальная часть остается постоянной.

Это ускоряет проверки на равенство между направляющими (так как различия будут в начале) и улучшает вариации для усеченных.

Для поиска в столбцах SqlServer создает индексы аналогично телефонному справочнику или словарю. Поиск слов, начинающихся с «Over *», гораздо быстрее, чем поиск слов, заканчивающихся на «* flow».

Это означает, что для сервера Sql любые последовательные направляющие должны быть сохранены с повторяющимися значениями в первую очередь, поэтому он сохраняет их в начале.

8
20.08.2008 12:55:52