为什么MVC 5使用字符串而不是int作为用户的主键?

时间:2014-10-21 20:49:05

标签: asp.net-mvc-5

这个糟糕的设计不是吗?

在我看来,你的表的主键,特别是像Users这样的常用表,应该是一个整数,因为索引(可能)会更快?

MSSQL是否在幕后做了一些特别的事情来快速制作字符串索引?

我看过其他一些关于如何将用户的PK更改为int的帖子,所以我假设其他人也有类似的性能问题。与此同时,MS有很多人整天坐在那里思考这些东西,所以也许我错过了什么?

GUID会为您提供哪些优惠?我能想到的唯一一个是你可以创建一个新的GUID而不用担心碰撞或特殊的计数器逻辑 - 但是,如果你在模式中将列标记为标识,那么数据库会为你自动增加它。因此,对于具有足够用户的站点来说,只需要对用户数据库进行分片即可获益。

1 个答案:

答案 0 :(得分:0)

使用int会更快。 IdentityUser的ID是一个字符串,所以作为一个方便的解决方案,您可以将其子类化并开箱即用使用intGuid或MongoDB ObjectId(当然,存储为字符串) )。这是一个舒适的解决方案,虽然不是最佳的性能。但是,如果您希望可以将其更改为真实int。方法如下:http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity

MS SQL没有做任何特别的事情。由于上述原因,仅使用字符串。

您可以参考这篇文章,了解数据库中intGuid主键之间的差异:http://blog.codinghorror.com/primary-keys-ids-versus-guids/