【发布时间】:2016-05-22 21:22:06
【问题描述】:
上下文
我们开始开发一个使用 GUID 作为 PK 的系统,默认情况下使用 Entity Framework 将其标记为集群(我知道...)。我现在意识到在插入数据库时这可能会如何影响性能,尤其是因为 GUID 被用作聚集索引。
我做了一些研究,发现了很多有用的信息,但我仍然对如何解决这个问题感到困惑。此外,如果我们决定从 GUID PK 迁移到 INT,我们有一个包含将近一百万行的生产数据库。
问题:
-
另一种解决方案是将聚集索引更改为另一列(即:DateTime),但是如果我们的联接主要使用 PK,这会给我们带来多大的性能差异?
李> 开始使用顺序 guid (NHibernate Comb),但是如果我们现有的 Guid 不是顺序的,如果我们只是开始对新行使用顺序 guid 会不会有影响?
如果最佳解决方案是从 GUID 迁移到 INT,那么是否可以通过实体代码优先迁移来实现(如果可能的话)?
我现在还应该担心这个吗?也许是预优化,但数据库正在快速增长,我不想在 2 到 3 百万行之后继续前进并意识到我们必须尽快修复它。
约束
- MSSQL(托管在 Azure SQL 上)
- 实体框架代码优先迁移(最好)
- 需要迁移的现有数据库
感谢任何可以帮助我做出正确决定的建设性反馈。我不是在寻找书面的解决方案,而可能只是一些可以为我指明正确道路的指导。
【问题讨论】:
-
嗨瑞恩,你最后做了什么?我目前面临同样的问题,我正在考虑添加一个新列(int,identity),将其设置为聚集索引并将我的 PK(Guid)保留为非聚集
标签: sql-server entity-framework azure primary-key clustered-index