Asp.net身份:为什么索引位于GUID(nvarchar)上?使用int有任何好处/缺点?

时间:2019-01-27 01:31:27

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

当我使用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是否有任何真正的缺点(和/或好处)?

感谢您的帮助...

1 个答案:

答案 0 :(得分:2)

已经在互联网上对此问题进行了很多讨论。这确实是一个永无止境的辩论/主题,因为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?