在我开始提问之前,我简要介绍一下问题所在:
我有一个存储大约400万个'参数'值的表。这些值具有id,模拟ID和参数id。
参数id映射到一个参数表,它基本上只是将id映射到一个文本,如参数x,y等的表示等。
模拟表有大约170k个条目,用于将参数值映射到作业。
还有一个分数表存储每个模拟的分数,模拟具有不同的分数,例如,一个可能有一个分数,另一个可能有三个。得分表有一个simulation_id列用于选择它。
每份工作都有自己的目标。
目前我试图选择所有参数为'x'且参数id为17的参数_值并获取其得分。选择的变量会发生变化,但是只有这些变量才能真正感兴趣。
目前我正在使用此声明:
SELECT simulation.id , value , name , ( SELECT GROUP_CONCAT(score) FROM score WHERE score.simulation_id = simulation.id ) AS score FROM simulation,parameter_value,parameter WHERE simulation.id=parameter_value.simulation_id AND simulation.job_id = 17 AND parameter_value.parameter_id=parameter.id AND parameter.name = "$x1"
除了需要大约3秒钟才执行之外,这个工作很有用。这可以更快地完成吗?
我不知道在此之前是否会更快地进行查询,以便预先计算我正在搜索和执行WHERE parameter_id IN(1,2,3,4)等的参数_。
但我觉得SQL会优化这个吗?
我已经尽可能创建了索引,但速度不能超过2.7秒。
所以我的问题是: 我应该预先计算一些值并避免连接, 除了group_concat还有其他方法可以获得分数 我可以对此做出任何其他优化吗?
我还应该补充一点,分数必须在同一行或至少返回排序,以便我可以轻松地从结果集中读取它们。
谢谢, 刘易斯