正如标题所说,我想知道,为什么ASP.NET Identity 2.0使用带有GUID的字符串作为用户表的主聚集键.这对整数id有什么好处吗?我只看到了一个问题,GUID不是聚集索引的最佳 Select .
我是否遗漏了什么,或者整数仍然是更好的 Select ?
正如标题所说,我想知道,为什么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 ——唯一且可靠地标识表中每一行的候选键之一.这
- 集群键(表中定义"集群索引"的一列或多列)——这是一个与物理存储相关的键
这完全证实了你的印象.