【问题标题】:Asp.net identity: Why the index is on GUID (nvarchar)? Any benefit/drawback to use int?Asp.net 身份:为什么索引在 GUID (nvarchar) 上?使用 int 有什么好处/缺点?
【发布时间】:2019-01-27 01:31:26
【问题描述】:

当我使用 Visual Studio 2017 生成 MVC.NET 时,它会生成一些表 AspNetUsers、AspNetRoles 等...

如果查看已经生成的Id,都在nvarchar(128)中,值就是GUID。

我的第一反应是将其更改为 int,但我认为 Microsoft 必须有充分的理由使用 GUID 而不是 int。但是谷歌搜索,我找不到答案。

现在,我明白了为什么它将所有 id 存储为 nvarchar(128),这是因为并非所有数据库都具有字段类型 GUID。但我找不到使用 GUID 和 int 的好处。

进一步搜索互联网,我找到了这篇文章:GUIDs as PRIMARY KEYs and/or the clustering key。现在,听起来 GUID 可能是一个糟糕的选择。

我还处于早期阶段,所以我仍然是时候从 GUID 更改为 int。但是使用 int 代替 GUID 是否有任何真正的缺点(和/或好处)?

感谢您的帮助...

【问题讨论】:

  • Asp.net 身份提供者类与身份数据库交互,以方便开箱即用的身份管理和身份验证。为什么他们使用 GUID 作为主要键列,只有 MS 可以回答这个问题。将其更改为 INT 是可能的,但不值得。如果数据库中有几千个用户,那么 GUID 和 INT 之间的性能实际上并没有太大变化。
  • 您可以阅读this 了解更改身份数据库架构所涉及的工作量。

标签: sql-server asp.net-mvc asp.net-identity guid


【解决方案1】:

互联网上已经对此问题进行了大量讨论。这确实是一个永无止境的辩论/话题,因为 int/longGUID 作为主键各有利弊。

GUID vs INT Debate 是一篇关于这个主题的精彩文章。

你也可以关注Why is ASP.NET Identity 2.0 using a GUID/string as user id?

除了这些文章讨论之外,我还可以向您提出一些建议:

  1. 默认情况下,SQL Server 主键是集群键,除非你明确告诉它不要这样做,否则在GUID 主键的情况下会导致性能不佳。如果您考虑到这一点,请不要选择 GUID 作为主键。

  2. 如果您认为您的主键不是唯一标识符就没有特殊含义,请选择 GUID 作为主键。

  3. 如果您需要有意义且可读的主键,请选择int/long作为主键。

如果您选择GUID 作为您的主要用户,那么您可以查看What are the best practices for using a GUID as a primary key, specifically regarding performance?

【讨论】:

  • 这正是我想要的。谢谢!在阅读了 marc_s 写的接受的答案后,我决定使用 int
猜你喜欢
  • 2023-04-07
  • 2010-09-13
  • 2010-10-20
  • 2010-09-11
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多