我目前正在使用ASP.NET的SQL成员资格提供程序,它使用GUID作为用户ID。我的应用程序有几个自定义表,它们具有返回User表的外键关系,我担心标准提供程序对用户ID使用GUID的磁盘空间和性能影响。
是否有人遇到与此相关的空间/性能问题?如果有,那么人们已经实施了自定义方法来解决此问题吗?
非常感谢任何见解或建议。
由于
答案 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