ASP.NET成员资格提供程序,用户ID GUID和磁盘空间

时间:2009-05-14 17:33:22

标签: performance asp.net-membership guid

我目前正在使用ASP.NET的SQL成员资格提供程序,它使用GUID作为用户ID。我的应用程序有几个自定义表,它们具有返回User表的外键关系,我担心标准提供程序对用户ID使用GUID的磁盘空间和性能影响。

是否有人遇到与此相关的空间/性能问题?如果有,那么人们已经实施了自定义方法来解决此问题吗?

非常感谢任何见解或建议。

由于

3 个答案:

答案 0 :(得分:5)

我怀疑使用GUID而不是INT类型会导致任何空间问题。我要警告你的一件事是你可能想在数据库中的GUID列上创建聚簇索引。不要这样做。默认情况下,GUID是随机的,将随机数据插入具有聚簇索引的列会导致一些问题。如您所知,聚集在一起意味着物理存储序列。因此,当您插入新的随机值(GUID)时,该行通常必须插入到表的中间。这可能导致大量分散的索引。

我的建议是创建一个将GUID链接到INT值的表(如果您希望有很多用户,则为BIGINT),然后在其他地方使用INT。就像费尔明刚才说的那样。

答案 1 :(得分:1)

你有没有一个自定义表,它将GUID映射到一个整数值,然后你可以在自定义表中使用整数?

UserId guid
FriendlyUserId int //use this as FK in other tables?

答案 2 :(得分:1)

如果您使用的是SQL Server 2005,则可能需要查看NewSequentialId()方法。 Eric Swann向会员提供商提供good overview使用权。使用顺序GUID优于默认随机GUID也有nice article的好处。以下是文章中的性能比较摘录......

                  [Reads] [Writes]  [Leaf Pages] [Avg Page Used] [Avg Fragmentation] [Record Count]
  IDENTITY(,)     0        1,683      1,667     98.9%            0.7%               50,000
  NEWID()           0      5,386      2,486     69.3%           99.2%               50,000
  NEWSEQUENTIALID() 0      1,746      1,725     99.9%            1.0%               50,000