SQL Server与单列或多列主键的性能差异?

mik*_*ike 8 sql-server performance primary-key

如果主键是单列(例如,为每行生成的GUID)或多列(例如,外键GUID +偏移号),则表(在插入/更新和查询方面)性能是否存在任何差异? )?

我会假设查询速度应该更快,如果有任何多列主键,但我会想象插入会更慢,因为一个稍微复杂的独特检查?我还想象多列主键的数据类型也很重要(例如,如果其中一列是DateTime类型,则会增加复杂性).这些只是我想要调用答案和讨论(希望!)并且不是基于事实的.

我意识到还有一些其他问题涉及这个主题,但我想知道性能影响而不是管理/业务问题.

Per*_*DBA 4

与密钥中的组件数量相比,密钥的(每个)组件(a)可变长度和(b)宽度[宽而不是窄列]对您的影响更大。除非 MS 在最新版本中再次破坏了它(他们在 2005 年破坏了堆)。数据类型不会减慢速度;宽度,特别是可变长度(任何数据类型)。请注意,如果固定 len 列设置为 Nullable,则该列将变为可变。索引中的可变 len 列是个坏消息,因为每次访问都必须执行一些“解包”才能获取数据。

显然,保持索引列尽可能窄,使用固定列,而不是仅使用可空列。

就复合键中的列数而言,肯定一列比七列快,但也不是那么快:三个宽宽可变列比七个细固定列慢得多。

GUID当然是一个非常厚的密钥;GUID加上其他东西就非常非常丰富了;GUID Nullable 是吉尼斯材料。不幸的是,这是解决身份问题的下意识反应,而这又是没有选择良好的自然关系键的结果。所以建议您最好从源头上解决真正的问题,并选择好的自然键;避免身份;避免 GUID。

经验和性能调优,而不是猜测。