Когда GUID может быть неуместным
GUID почти всегда будут медленнее, потому что они больше. Это делает ваши индексы больше. Это делает ваши столы больше. Это означает, что если вам придется сканировать таблицы полностью или частично, это займет больше времени и вы увидите меньшую производительность. Это огромная проблема в системах отчетности. Например, никогда не следует использовать GUID в качестве внешнего ключа в таблице фактов, поскольку его длина обычно значительна, поскольку таблицы фактов часто частично сканируются для создания агрегатов.
Также подумайте, уместно ли использовать «long». Это чрезвычайно большое количество. Вам это нужно, только если вы думаете, что в какой-то момент в вашей таблице может быть более 2 МИЛЛИАРДОВ. Я редко их использую.
GUID также может быть сложным в использовании и отладке. Сказать: «есть проблема с записью клиента 10034, Фрэнк, пойди, проверь ее» гораздо проще, чем сказать «есть проблема с {2f1e4fc0-81fd-11da-9156-00036a0f876a} ...» Ценные и длинные также проще вводить в запросы, когда вам нужно.
О, и это не тот случай, когда вы никогда не получаете один и тот же GUID дважды. Известно, что это происходит в очень больших, отключенных системах, поэтому нужно учитывать это, хотя я бы не стал разрабатывать это для большинства приложений.
Когда могут быть подходящими GUID
GUID подходят для работы с отключенными системами, в которых объекты создаются и затем синхронизируются. Например, если кто-то делает запись в вашей базе данных на мобильном устройстве и синхронизирует ее, или у вас есть объекты, созданные в разных филиалах и синхронизируемые с центральным хранилищем ночью. Это та гибкость, которую они вам дают.
GUID также позволяют вам связывать объекты, не сохраняя их в базе данных, в определенных сценариях ORM. Linq to SQL (и я считаю, что EF) не имеют этой проблемы, хотя бывают случаи, когда вы можете быть вынуждены отправить свои изменения в базу данных, чтобы получить ключ.
Если вы создаете свои GUID на клиенте, возможно, что поскольку создаваемые вами GUID не являются последовательными, производительность вставки может снизиться из-за разбиения страницы в БД.
Мой совет
Много вещей, чтобы рассмотреть здесь. Мой голос - не использовать их, если у вас нет веских аргументов в пользу их использования. Если ваша цель - производительность, держите ваши столы маленькими. Держите свои поля маленькими. Держите свои индексы БД маленькими и выборочными.