gpt4 book ai didi

sql-server - 单列或多列主键的 SQL Server 性能差异?

转载 作者:行者123 更新时间:2023-12-03 01:28:22 26 4
gpt4 key购买 nike

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

如果使用多列主键,我会假设查询速度应该更快,但是我认为由于稍微复杂的唯一检查,插入会更慢?我还想象多列主键的数据类型也可能很重要(例如,如果其中一列是 DateTime 类型,则会增加复杂性)。这些只是我的想法,以引起答案和讨论(希望如此!),并非基于事实。

我意识到有 some其他 questions涵盖这个主题,但我想知道性能影响而不是管理/业务问题。

最佳答案

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

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

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

GUID当然是一个非常胖的键; GUID加上其他任何东西都非常非常胖; GUID Nullable 是 Guness Material 。不幸的是,这是解决 IDENTITY 问题的下意识 react ,而这又是没有选择好的自然关系键的结果。所以建议你从源头上解决真正的问题,并选择好的自然键;避免身份;避免 GUID。

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

关于sql-server - 单列或多列主键的 SQL Server 性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com