GUID кажется естественным выбором - и, если вам действительно нужно, вы, вероятно, можете поспорить, чтобы использовать его для PRIMARY KEY таблицы - единственное значение, которое однозначно идентифицирует строку в базе данных.
Что я настоятельно рекомендую не делать, так это использовать столбец GUID в качестве ключа кластеризации, что SQL Server делает по умолчанию, если вы специально не запретите это.
Как Кимберли Трипп - Королева индексирования - и другие неоднократно заявляли - GUID, так как ключ кластеризации не является оптимальным, поскольку из-за его случайности он приведет к массивной странице и фрагментация индекса и вообще плохая производительность.
Да, я знаю - в SQL Server 2005 и более поздних версиях newsequentialid()
- но даже это не совсем и полностью последовательно и, следовательно, также страдает от тех же проблем, что и GUID - только чуть менее заметно.
Затем следует рассмотреть еще одну проблему: ключ кластеризации в таблице будет добавлен к каждой записи в каждом и каждом некластеризованном индексе в вашей таблице - таким образом, вы действительно хотите убедиться, что он настолько мал, насколько это возможно. , Как правило, INT с 2+ миллиардами строк должно быть достаточно для подавляющего большинства таблиц - и по сравнению с GUID в качестве ключа кластеризации вы можете сэкономить сотни мегабайт хранилища на диске и в памяти сервера.
Итак, подведем итог: если у вас нет веских причин, я бы всегда рекомендовал поле INT IDENTITY
в качестве первичного / кластеризованного ключа в вашей таблице.
Марк