【问题标题】:username/password in separate table or user table?单独的表或用户表中的用户名/密码?
【发布时间】:2011-05-07 05:52:58
【问题描述】:

我正在运行一个社交网站,我目前在用户表中拥有大部分主要用户数据(真实姓名、用户名、电子邮件、密码、性别等)。在设计方面,将用户名+密码移动到单独的表中是否会提高性能?

我正在使用 mysql。

【问题讨论】:

标签: mysql database-design


【解决方案1】:

由于表更小,只需要用户名和密码的身份验证查询会运行得稍微快一些。

但是,如果您在(username, password_hash) 上创建复合索引,它会更快,因为这样的查询:

SELECT  password_hash
FROM    users
WHERE   username = 'myusername'

只需要运行索引(它会在计划中显示using index)。

【讨论】:

  • 不需要索引 password_hash,因为用户名很可能是唯一的。始终返回 0 或 1 行的查询。
  • 索引中password_hash的目的不是让它唯一,而是让它更快,因为正如Quassnoi所说,在找到行后不需要去表数据。跨度>
  • 无论用户名和密码在哪里,都不需要索引这两个字段,因为用户名可能是唯一的。无论密码是什么,对user=? and pass=? 的查询都会使用用户名的唯一索引非常快地返回。
  • @cherouvim,我认为你没有抓住重点。表访问和索引访问总是比索引访问慢(尽管可能不明显)。
  • 是的,你是对的。它会更快一些,但只值得索引数据大小,以防你每秒有数千次登录。
猜你喜欢
  • 2016-05-08
  • 2018-10-18
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2015-06-30
  • 1970-01-01
相关资源
最近更新 更多