Я поддерживаю большинство других ответчиков в том, что вам следует избегать использования GUID в качестве кластеризованного ключа в SQL Server - если вы действительно этого хотите, вы можете использовать их в качестве первичного ключа, но не кластеризируйте свою таблицу на нем.
Первичный ключ - это логическая концепция ключа для уникальной идентификации каждой строки - здесь GUID может иметь смысл, поскольку он в значительной степени гарантированно является уникальным.
Но кластерный ключ - это физическая концепция, которая физически упорядочивает строки в таблице, и здесь из-за их случайного характера GUID плохо подходят. Это приведет к массовой фрагментации индекса и, следовательно, к низкой производительности, даже если вы будете реорганизовывать свой индекс (и, следовательно, данные таблицы) снова и снова.
Кроме того, поскольку ключ кластеризованного индекса используется в качестве значения поиска для поиска строки в таблице, он будет добавлен к каждой записи каждого и каждого некластеризованного индекса в вашей таблице, и здесь вступает в игру размер GUID (16 байт) и INT (4 байт) - вы потенциально тратите много места только на отслеживание значений поиска.
Лучшее обсуждение основных / кластеризованных индексов и GUID, о которых я знаю, - это пара статей Кима Триппа, королевы индексирования в SQL Server, - посмотрите их!
Ее конечные требования к кластерному индексу: малы, стабильны, уникальны и, надеюсь, постоянно возрастают. GUID нарушают два из них (маленький и постоянно увеличивающийся). Даже GUID, сгенерированные функцией NEWSEQUENTIALGUID () в SQL Server, не являются полностью и действительно последовательными, поэтому я бы не стал их использовать.
Марк