首页 > 解决方案 > Asp.net 身份:为什么索引在 GUID (nvarchar) 上?使用 int 有什么好处/缺点?

问题描述

当我使用 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有什么真正的缺点(和/或好处)吗?

谢谢你的帮助...

标签: sql-serverasp.net-mvcasp.net-identityguid

解决方案


网上已经有很多关于这个问题的讨论。这确实是一个永无止境的辩论/话题,因为两者int/longGUID主键都有优点和缺点。

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

您还可以查看为什么 ASP.NET Identity 2.0 使用 GUID/字符串作为用户 ID?

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

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

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

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

如果您选择GUID作为主键,那么您可以查看使用 GUID 作为主键的最佳做法是什么,特别是在性能方面?


推荐阅读