mik*_*ike 8 sql-server performance primary-key
如果主键是单列(例如,为每行生成的GUID)或多列(例如,外键GUID +偏移号),则表(在插入/更新和查询方面)性能是否存在任何差异? )?
我会假设查询速度应该更快,如果有任何多列主键,但我会想象插入会更慢,因为一个稍微复杂的独特检查?我还想象多列主键的数据类型也很重要(例如,如果其中一列是DateTime类型,则会增加复杂性).这些只是我想要调用答案和讨论(希望!)并且不是基于事实的.
与密钥中的组件数量相比,密钥的(每个)组件(a)可变长度和(b)宽度[宽而不是窄列]对您的影响更大。除非 MS 在最新版本中再次破坏了它(他们在 2005 年破坏了堆)。数据类型不会减慢速度;宽度,特别是可变长度(任何数据类型)。请注意,如果固定 len 列设置为 Nullable,则该列将变为可变。索引中的可变 len 列是个坏消息,因为每次访问都必须执行一些“解包”才能获取数据。
显然,保持索引列尽可能窄,使用固定列,而不是仅使用可空列。
就复合键中的列数而言,肯定一列比七列快,但也不是那么快:三个宽宽可变列比七个细固定列慢得多。
GUID当然是一个非常厚的密钥;GUID加上其他东西就非常非常丰富了;GUID Nullable 是吉尼斯材料。不幸的是,这是解决身份问题的下意识反应,而这又是没有选择良好的自然关系键的结果。所以建议您最好从源头上解决真正的问题,并选择好的自然键;避免身份;避免 GUID。
经验和性能调优,而不是猜测。
| 归档时间: |
|
| 查看次数: |
4918 次 |
| 最近记录: |