mysql group_concat替代或多行作为列

时间:2013-11-15 23:39:38

标签: mysql optimization group-concat

在我开始提问之前,我简要介绍一下问题所在:

我有一个存储大约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还有其他方法可以获得分数 我可以对此做出任何其他优化吗?

我还应该补充一点,分数必须在同一行或至少返回排序,以便我可以轻松地从结果集中读取它们。

谢谢, 刘易斯

0 个答案:

没有答案