【问题标题】:What is best for a profile, a number or a name?什么是个人资料、号码或姓名的最佳选择?
【发布时间】:2010-12-29 17:03:26
【问题描述】:

大多数拥有某种用户资料的网站要么会这样做:

profile.php?u=123445

否则:

profile.php?u=jason.Davis

所以我很好奇,使用名称通过 php/mysql 查找配置文件会比使用数字查找配置文件记录更慢吗?

【问题讨论】:

    标签: php mysql profile


    【解决方案1】:

    在每种情况下,字符串查找确实可能比数字查找慢。但差异是如此之小,以至于永远不会被注意到。除非您拥有真正大量用户。

    但是看看 SO:他们两者都做。

    http://stackoverflow.com/users/187606/pekka
    

    用于极速数据库访问的数字。

    漂亮的外观和搜索引擎可见性的名称。

    两个名字没有冲突,因为ID是用来搜索记录的。

    我认为这是两全其美的最佳选择。

    不过需要重写 URL。

    【讨论】:

    • 为什么在数据库查找中数字比名称快? (假设两者都被索引)。
    • 我不是数据库专家,但常识告诉我,即使是索引(将字符串的一部分转换为记录号)也必须始终比直接引用记录慢号本身。慢了一点,但还是慢了。如果我弄错了,请纠正我。
    • @Esteban,一个数字最有可能存储为一个固定宽度的整数(比如 4 个字节),而不是(例如)32 字节的字符串。由于数据较少,比较会更快,但更重要的是,索引的每一页都会存储更多记录,从而减少磁盘 I/O。
    • 这正是我的理论,我也从来没有意识到这就是为什么 SO 使用这种方法,感谢更多让我看到了光明
    • 有趣的是,您实际上可以在 id 后面加上任何名称:stackoverflow.com/users/187606/woodpekka
    【解决方案2】:

    名称将更具可读性和更易于调试,但名称不能保证是唯一的,因此需要通过 uniqifier (我相信这实际上是一个词,用于统一)来扩充,例如将数字附加到名称的末尾。

    【讨论】:

      【解决方案3】:

      我看到使用名称的主要问题不是查找速度,而是您不能有来自内布拉斯加州奥马哈的 Jason Davis 和来自西澳大利亚珀斯的另一个 Jason Davis。

      无论如何都要在世界上可以看到的所有内容中使用该名称,但为了确保唯一性,我会使用整数 ID。这也可以加快数据库查询的速度,但这对我来说是次要的问题。令人怀疑的是,使用字符串会给您的应用程序带来太多焦虑。

      【讨论】:

        【解决方案4】:

        如果您使用数据库索引,它应该不会明显变慢。但是如果你有两个 Jason Davises 会发生什么? UID 很好,因为您可以保证唯一性。

        【讨论】:

          【解决方案5】:

          两者都是错误的。你不想让 profile.php 给定 u=12345 作为参数。您想获取用户 12345 的个人资料。因此请使用 /profile/12345。

          阅读一些有关 REST 的内容,这很酷 :)

          【讨论】:

            【解决方案6】:

            使用名称查找个人资料会更慢吗[...]?

            如果您对它进行了测试,您会发现没有足够的差异值得为此烦恼。如果您担心性能,那么这应该是您最不担心的事情。

            【讨论】:

              【解决方案7】:

              如果名称是数据库中的键,则查找时间不应相差太大,并且使用名称会使 URL 看起来更好看,所以我建议使用名称。

              【讨论】:

              • 该名称最好不要作为数据库中的键,否则当另一个 e.g. John Smith 尝试开设一个帐户。
              • 当然,除非您乐于提供像 John.Smith.76352574763 这样的用户名 :-)
              • 等等,你的意思是大多数网站都允许你开两个同名账户?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-06-10
              • 1970-01-01
              • 2018-08-16
              • 2017-10-06
              • 1970-01-01
              • 1970-01-01
              • 2010-12-05
              相关资源
              最近更新 更多