Почему Guid.ToString () меняет порядок байтов? - PullRequest
8 голосов
/ 20 августа 2008

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

1 Ответ

8 голосов
/ 20 августа 2008

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

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

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

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

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

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

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

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

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

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