正如标题所说,我想知道,为什么ASP.NET Identity 2.0使用带有GUID的字符串作为用户表的主聚集键.这对整数id有什么好处吗?我只看到了一个问题,GUID不是聚集索引的最佳 Select .

我是否遗漏了什么,或者整数仍然是更好的 Select ?

推荐答案

关于guid的使用,有一种观点提倡使用没有"意义"的ID,以便将标识符与其周围的数据完全分离;此id不应在数据存储外部可见.如果我们看看surrogate key的一些特征,我们有以下几点

  • 该值在系统范围内是唯一的,因此永远不会重复使用
  • 价值是由系统生成的
  • 用户或应用程序不能操作该值
  • 该值不包含语义含义
  • 该值对用户或应用程序不可见
  • 该值不是由来自不同域的多个值组成的.

因此,GUID符合要求,因为它实际上是由系统生成的,与域没有关系.我认为GUID的使用主要是一个趋势问题,因为他们引入了"可扩展主键"的新机制,所以键可以更改,所以您可以fallback on an integer for your PK.


关于性能,我想让你看看this thread,其中公认的答案是:

guid似乎是主键的自然 Select ——如果

你真的需要区分两个问题:

  • 主键是一个逻辑 struct ——唯一且可靠地标识表中每一行的候选键之一.这
  • 集群键(表中定义"集群索引"的一列或多列)——这是一个与物理存储相关的键

这完全证实了你的印象.

Asp.net相关问答推荐

使用进程外会话状态的 ASP.NET 应用程序中的 SQL Server 连接问题

IE10 SCRIPT5009:__doPostBack未定义

返回 HttpResponseMessage 时的 WebAPI Gzip

是否可以使用 Membership API 更改用户名

asp.net mvc 中的 RedirectToAction 用法

什么相当于 ASP.NET 中的 cron 作业(job)?

无法加载文件或程序集'System.Web.WebPages.Razor,版本 = 3.0.0.0

HTTP 错误 401.3 - 未经授权

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

缩小失败.返回未缩小的内容

以编程方式从后面的代码中关闭 aspx 页面

您如何在 .net WebApi2 应用程序中的 OAuth2 令牌请求中使用额外参数

如何将数据集转换为数据表

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

使用 .NET 连接到 AS400

调查 Web.Config 重复部分原因的步骤

连接字符串正确时出现实例失败错误

如何从 ASP.NET Identity 获取用户列表?

x-powered by是什么意思?

MVC4 中 Global.asax.cs 页面中的问题