由于guid被用作主键等,使用内置asp.net身份验证提供程序是一个坏主意吗

由于guid被用作主键等,使用内置asp.net身份验证提供程序是一个坏主意吗,asp.net,sql-server,authentication,guid,Asp.net,Sql Server,Authentication,Guid,我正在进行一个项目,需要在asp.net mvc网站中扩展用户成员字段 我经历了这些不同的思维过程 使用“用户名”将用户加入到记录中。非常糟糕的想法,因为用户想要更改其用户名等 然后我想我可以将userId的guid连接到其他表 然后我想,如果将来我需要将id用作一个简单的id,那么使用guid可能是不好的。所以我设置了一个链接表,将guid连接到ints 我决定我不需要它,所以又回到了使用guid将东西链接在一起,这使得请求更加简单 阅读大量关于使用guid作为聚集索引时性能糟糕的讨论 我现在

我正在进行一个项目,需要在asp.net mvc网站中扩展用户成员字段

我经历了这些不同的思维过程

  • 使用“用户名”将用户加入到记录中。非常糟糕的想法,因为用户想要更改其用户名等

  • 然后我想我可以将userId的guid连接到其他表

  • 然后我想,如果将来我需要将id用作一个简单的id,那么使用guid可能是不好的。所以我设置了一个链接表,将guid连接到ints

  • 我决定我不需要它,所以又回到了使用guid将东西链接在一起,这使得请求更加简单

  • 阅读大量关于使用guid作为聚集索引时性能糟糕的讨论

  • 我现在很困惑,这是否意味着默认的asp.net身份验证对性能很糟糕

    我知道人们不应该过早地考虑性能问题,但我确实希望这个应用程序最终会非常流行,所以如果我必须“推出我自己的”身份验证提供商,我想也许我现在应该这样做

    由于asp.net成员资格为我做了一切,我已经从中抽象出来,因此,任何关于实际做这件事的链接都将不胜感激


    谢谢大家。

    如果您担心默认aspnet成员资格提供程序使用
    GUID
    PK的性能,只需实现您自己的成员资格提供程序,并使用
    int-identity(1,1)
    主键即可

    老实说,编写自己的成员资格提供程序非常简单,如果默认实现只涉及
    GUID
    PK,那么请将代码更改为使用整数而不是GUID。这最多不应该超过一个小时。要完成此图,请在数据库上运行aspnet_sql.exe以获取成员数据库,然后更改表和存储过程以匹配对源所做的更改


    以下是

    guid是比int或bigint更糟糕的选择,这在任何地方都被讨论和记录过。它们可怕吗?不是真的。有一些可怕的故事,应用程序在每个键和外键上都使用guid,还有你拥有的东西,但它们是例外

    guid的独特性有它的优点,如果使用得当,它们可以毫无问题地完成工作。我更愿意使用使用guid的默认提供程序实现,而不是使用自己的实现。与默认技能相比,正确且优于默认技能的技能集非常重要。我不是以贬损的方式说这句话,但是如果您需要了解guid对性能的影响的指导,那么您可能还没有准备好自己动手


    使用默认值,测试它,测量然后决定,我的2c

    什么使您认为使用GUID有什么问题?GUID不会影响性能。当然,它们比使用Int慢,但它们并不可怕。我在一个拥有140多万成员、流量巨大且速度极快的网站上使用.net成员身份。@John这是这个问题的后续问题:您使用Newsequentialid()方法吗?我刚刚在aspnet_用户的“默认值或绑定”上更改了此项,它似乎已经接受了此项更改。@Rex M,感谢您的帮助,也刚刚在另一页上看到了您的链接,用于设置顺序guid。非常感谢,我想我暂时可以使用guid,只要我在使用Newsequentialid()方面做了正确的事情。但感谢您提供了一个很好的链接,指向我在未来某个时候可能需要的内容。我认为实际上,查看源代码是一个好主意,因为它让您了解默认提供程序的黑盒是如何适合的together@RussCam-很抱歉没有给你正确的答案,但是看看这个问题,这主要是关于是否有必要切换,而不是在需要时如何切换。非常感谢你的建议。谢谢,是的,我看到使用内置的有很多默认值,我只是有点希望有一个开关,如果我需要的话,可以将它设置为int。但是如果需要的话,我可能会修改源代码。