1

我目前正在创建一个具有基本用户注册的网站,并将所有用户数据放在一个名为“用户”的表中。该用户在登录时或脚本在显示其详细信息时可能需要其中的 11 个字段,例如用户名、角色等。虽然密码、电子邮件、IP 等九个字段只有在用户登录时才能访问。如果数据库预计处理 100,000 到 1,000,000 个用户,我是否应该将登录相关字段拆分为一个名为“users_login”的表以减小主“用户”表的大小?

我知道这涉及到许多变量,最好的方法是测试两个版本,但在我这样做之前,我想就我是否出于某种原因不应该尝试这个征求意见。谢谢

4

1 回答 1

1

另一种不需要拆分表的方法是创建一个覆盖索引。某些查询的覆盖索引是索引条目本身包含执行查询所需的所有列的索引,这意味着执行不需要从表本身读取。例如,对于类似的查询select role from user where username = ?,(用户名,角色)上的索引将被覆盖。

在您的情况下,覆盖索引将位于十一个列上,这些列可能是“该用户在登录时或脚本在显示其详细信息时需要”。您需要将用作查找键的列(用户 ID 或用户名或其他)放在开头,因此索引将位于类似(用户名、角色和九个其他列、经常使用的列)上,而,登录,登录)。

这是 Wikipedia 的数据库团队使用这种技术在非常相似的情况下获得约 10 倍加速的示例:覆盖索引的地方

于 2013-10-19T13:13:17.050 回答