这取决于您的访问模式、读写比例以及(可能最重要的)聚集索引是否定义在主键上。
经验法则是尽可能使您的主键小(32位整数),并在可能的情况下将聚集索引定义为单调递增的键(考虑IDENTITY),除非您对该表的查询中有大量的范围搜索。
如果您的应用程序具有写入密集型,并且您在GUID列上定义了聚集索引,则应注意:
所有非聚集索引都将包含聚集索引键,因此会更大。如果有许多NC索引,则可能会对性能产生负面影响。
除非您使用“有序”的GUID(例如COMB或使用NEWSEQUENTIALID()),否则您的插入操作将随时间而使索引碎片化。这意味着您需要定期重建索引,并可能增加页面中留下的空闲空间量(填充因子)
由于有许多因素在起作用(硬件、访问模式、数据大小),我建议您运行一些测试并基准测试您特定的情况。
这取决于每种情况下的索引和存储方式。其他所有条件相同,主键的选择与性能无关。索引和其他存储选项的选择将是决定性因素。
如果您的情况将面向更多的插入操作,那么越小的磁盘空间越好。
有两个需要分离的事情,一个是数据库级别的主键概念,另一个是应用程序使用的键概念。
为什么需要 GUID?您是否要插入到多个数据库服务器,然后将信息合并到一个集中式数据库中?
如果是这样,我的建议是使用标识后跟 GUID。在标识上集群索引,在 GUID 上唯一非聚集索引。如果将 GUID 用作集群索引,则数据插入将无序地分布在整个表中。这意味着您的系统会随机插入和移动页面,从而导致性能问题。
通过标识使数据插入有序是正确的方法。您可以将排序留给索引结构(包含 GUID 的非聚集唯一索引),这比使用表数据进行排序要高效得多。