查询MySQL中大量动态配置文件的最有效方法是什么?

时间:2016-02-05 14:54:58

标签: mysql sql

我有一个用户系统。每个用户都有个人资料。配置文件字段动态存储在数据库中。数据库看起来像:

CREATE TABLE profileFields(
    profileField_id INT(255) AUTO_INCREMENT,
    profileField_name VARCHAR(255),
    profileField_value VARCHAR(255),
    profileField_type VARCHAR(255),
    profileField_isOptional TINYINT(1),
    PRIMARY KEY(profileField_id)
);
CREATE TABLE users(
    user_id INT(255) AUTO_INCREMENT,
    user_username VARCHAR(255),
    user_password VARCHAR(255),
    user_email VARCHAR(255),
    PRIMARY KEY(user_id)
);
CREATE TABLE profileValues(
    profileValue_id INT(255) AUTO_INCREMENT,
    profileValue_profileField_id INT(255),
    profileValue_user_id INT(255),
    profileValue_value VARCHAR(255),
    PRIMARY KEY(profileValue_id)
);

我正在尝试获取包含所有个人资料字段和值的所有用户的列表。 我总共有50.000个用户和60个配置文件字段,产生了3.000.000个配置文件值。

检索此类列表的最有效方法是什么(并可能根据配置文件字段执行搜索)?

1 个答案:

答案 0 :(得分:0)

“最有效”的方式总是难以识别。首先尝试这些:

  1. 将重复profileValues.profileValue_value中的许多值,因此您可以考虑创建一个包含所有可能字符串的表(可能是不断增长的列表)并将该字段转换为int。然后可以将其编入索引以进行非常有效的搜索,而无需执行3M行。

  2. profileValues在profileValue_id上​​不需要PK;考虑(profileValue_user_id + profileValue_profileField_id)的PK。这将确保更快地将联接编入索引。

  3. 您还需要检查:What is the MAX number if I store int(255) in MySQL?

相关问题