我正在开发一个维护大约 5 个表的数据库密集型应用程序。这些表中的每一个都包含数千条记录。所有表都使用 GUID 聚集主键。为了提高效率,我在表之间删除了外键。
我正在运行一个 65000 行长的脚本,它创建了一大堆表(包括我的表)和存储过程(大约一半的时间在那里花费)然后继续向我的表中插入大约 40000 条记录,然后更新大约 20000 条这些记录。
在我的 AMD 3.5 Ghz 8 核机器上需要 1:15。
令人惊讶的是,如果我更改这 5 个表这样 - 添加 BIGINT 身份代理主键(查询仍然使用 GUID 连接) - 将先前的集群 GUID 主键降级为唯一列
然后它在 3:00 分钟内运行!
将其从 BIGINT 更改为 INT 大约需要 1:30!
集群 GUID PK 的运行速度怎么可能比自动递增的 INT 快得多,并且比自动递增的 BIGINT 集群 PK 快得多?
注意:GUID 值本身是在代码中生成的,而不是由 DB 生成的。
查看这个简化的基准脚本,演示我的意思。