gpt4 book ai didi

sql-server - 将 Guid 主键和聚集索引迁移到 INT (Azure SQL)

转载 作者:行者123 更新时间:2023-12-04 18:01:03 25 4
gpt4 key购买 nike

上下文

我们开始开发一个使用 GUID 作为 PK 的系统,默认情况下使用 Entity Framework 将其标记为集群(我知道......)。我现在意识到在数据库中插入时这可能会如何影响性能,特别是因为 GUID 用作聚集索引。

我做了一些研究并发现了很多有用的信息,但我仍然对应该如何解决这个问题感到困惑。此外,我们有一个包含近百万行的生产数据库,如果我们决定从 GUID PK 迁移到 INT,则必须迁移这些行。

问题:

  1. 另一种解决方案是将聚集索引更改为另一列(即:DateTime),但是如果我们的连接主要使用 PK,这会给我们带来多大的性能差异?

    <
  2. 开始使用顺序 guid (NHibernate Comb),但如果我们现有的 Guid 不是顺序的,那么如果我们开始对新行使用顺序 guid 会产生影响吗?

  3. 如果最佳解决方案是从 GUID 迁移到 INT,那么是否可以通过实体代码优先迁移来实现此目的(如果可能的话)?

  4. 我现在应该担心这个吗?也许这是预优化,但数据库增长很快,我不想在 2-300 万行之后意识到我们必须尽快修复它。

约束

  • MSSQL(托管在 Azure SQL 上)
  • Entity Framework 代码优先迁移(最好)
  • 需要迁移的现有数据库

我感谢任何可以帮助我做出正确决定的建设性反馈。我并不是在寻找书面的解决方案,而可能只是寻找一些指导,为我指明正确的道路。

最佳答案

将 GUID 作为 PK 不是问题。但当 GUID 列上有 CLUSTERED 索引时,可能会导致性能问题。因此,您可以保持所有 PK 不变,同时将 CLUSTERED 索引迁移到您想要的任何位置。

每个 PK 列(guid)上仍然存在一个索引,因此连接唯一值的性能会是一样的。更改只会影响写入性能,也可能影响读取性能。写入时的页面拆分会更少,因为行将按顺序附加到索引的末尾,而不是插入到聚集索引的中间和开头的随机页面中。

您可以使用以下命令更改 PK选项 NONCLUSTERED 并创建另一个聚集索引(不必是 PK 甚至是唯一的)。

关于sql-server - 将 Guid 主键和聚集索引迁移到 INT (Azure SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350533/

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