Asp.net 身份:为什么索引在 GUID (nvarchar) 上?任何benefit/drawback使用int?
Asp.net identity: Why the index is on GUID (nvarchar)? Any benefit/drawback to use int?
当我使用 Visual Studio 2017 生成 MVC.NET 时,它会生成一些表 AspNetUsers、AspNetRoles 等...
如果您查看已生成的 Id,它们都在 nvarchar(128) 中并且值只是 GUID。
我的第一反应是将其更改为 int,但我认为 Microsoft 必须有充分的理由使用 GUID 而不是 int。但是 google 搜索,我找不到答案。
现在,我明白了为什么它将所有 id 存储为 nvarchar(128),这是因为并非所有数据库都具有字段类型 GUID。但是我找不到使用 GUID 和 int 的好处。
进一步上网搜索,找到这篇文章:GUIDs as PRIMARY KEYs and/or the clustering key。现在,听起来 GUID 可能是一个糟糕的选择。
我处于早期阶段,所以我还需要从 GUID 更改为 int。但是使用 int 而不是 GUID 是否有真正的缺点(and/or 好处)?
感谢您的帮助...
互联网上已经对这个问题进行了很多讨论。这真是一个永无止境的 debate/topic,因为 int/long
和 GUID
作为主键各有利弊。
GUID vs INT Debate 是一篇关于这个主题的精彩文章。
您还可以查看 为什么 ASP.NET Identity 2.0 使用 GUID/string 作为用户 ID?
除了这些文章讨论之外,我可以向您推荐几件事:
默认情况下SQL服务器主键是集群键,除非你明确告诉它不要,这会导致GUID
主键性能不佳。如果考虑到这一点,请不要选择 GUID
作为主键。
如果您认为您的主键没有特殊意义而不是唯一标识符,请选择 GUID
作为主键。
如果您需要有意义且可读的主键,请选择 int/long
作为主键。
如果你选择 GUID
作为你的主要那么你可以看看 What are the best practices for using a GUID as a primary key, specifically regarding performance?
当我使用 Visual Studio 2017 生成 MVC.NET 时,它会生成一些表 AspNetUsers、AspNetRoles 等...
如果您查看已生成的 Id,它们都在 nvarchar(128) 中并且值只是 GUID。
我的第一反应是将其更改为 int,但我认为 Microsoft 必须有充分的理由使用 GUID 而不是 int。但是 google 搜索,我找不到答案。
现在,我明白了为什么它将所有 id 存储为 nvarchar(128),这是因为并非所有数据库都具有字段类型 GUID。但是我找不到使用 GUID 和 int 的好处。
进一步上网搜索,找到这篇文章:GUIDs as PRIMARY KEYs and/or the clustering key。现在,听起来 GUID 可能是一个糟糕的选择。
我处于早期阶段,所以我还需要从 GUID 更改为 int。但是使用 int 而不是 GUID 是否有真正的缺点(and/or 好处)?
感谢您的帮助...
互联网上已经对这个问题进行了很多讨论。这真是一个永无止境的 debate/topic,因为 int/long
和 GUID
作为主键各有利弊。
GUID vs INT Debate 是一篇关于这个主题的精彩文章。
您还可以查看 为什么 ASP.NET Identity 2.0 使用 GUID/string 作为用户 ID?
除了这些文章讨论之外,我可以向您推荐几件事:
默认情况下SQL服务器主键是集群键,除非你明确告诉它不要,这会导致
GUID
主键性能不佳。如果考虑到这一点,请不要选择GUID
作为主键。如果您认为您的主键没有特殊意义而不是唯一标识符,请选择
GUID
作为主键。如果您需要有意义且可读的主键,请选择
int/long
作为主键。
如果你选择 GUID
作为你的主要那么你可以看看 What are the best practices for using a GUID as a primary key, specifically regarding performance?