将不常访问的字段与表分开



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

我知道涉及许多变量,最好的方法是测试两个版本,但在我这样做之前,我正在征求建议,如果我出于某种原因不应该尝试这样做。谢谢

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

在您的情况下,覆盖索引将位于 11 列上,这些列可能是"该用户在登录时或脚本在显示其详细信息时需要的"。您需要将用作查找键的列(用户 ID 或用户名或其他任何内容)放在开头,因此索引将位于类似(用户名、角色和九、其他、列、使用、频繁、同时、登录、输入)上。

以下是维基百科数据库团队使用这种技术在非常相似的情况下获得~10倍加速的示例:覆盖索引摇滚的地方。

最新更新