【发布时间】:2012-08-09 21:40:32
【问题描述】:
我有一个应用程序在几乎所有表中都使用 GUID 作为主键,并且我读到使用 GUID 作为主键时存在性能问题。老实说,我没有看到任何问题,但我即将开始一个新的应用程序,我仍然想使用 GUID 作为主键,但我正在考虑使用复合主键(GUID 可能还有另一个字段.)
我使用 GUID 是因为当您拥有不同的环境(例如“生产”、“测试”和“开发”数据库)以及数据库之间的数据迁移时,它们很好且易于管理。
我将使用 Entity Framework 4.3,并且我想在应用程序代码中分配 Guid,然后再将其插入数据库。 (即我不想让 SQL 生成 Guid)。
创建基于 GUID 的主键的最佳做法是什么,以避免与此方法相关的假定性能损失?
【问题讨论】:
-
这个问题不是假设的。如果您的 PK 是集群的,那么几乎每个插入都有可能导致页面拆分。在现代版本的 SQL Server 中,这已使用 NEWSEQUENTIALID()“修复”,但这失去了能够预先计算它的好处。我强烈建议您阅读其他地方的 GUID,因为这是一个过于宽泛的问题,并且可能会引发一场持续数小时的宗教斗争......
-
我还要补充一点,server 这个词在 I want to assign the Guid on the server 中不明确方面(不想让 SQL 创建 GUID).
-
这个问题和这个“sql-server-guid-sort-algorithm-why”stackoverflow.com/questions/7810602/…有相似之处
标签: sql-server entity-framework database-design primary-key guid