MySQL查询需要优化

时间:2017-03-02 20:08:07

标签: mysql

我有一个查询,在产品价格和ID在一个表中的数据库中获取每个型号的最低价格的产品ID,并且型号ID位于通过产品链接到产品的属性表中一个id_product字段。

问题是这个查询目前需要40多秒才能运行,并且由于表中目前只有大约1/4的产品,它需要运行得更快才能在决赛中使用产品

此处的查询是:

SELECT P.id, A.value
FROM  `products` P,  `attributes_values` A
WHERE A.id_product = P.id
AND P.price = ( 
SELECT MIN( P2.price ) 
FROM  `products` P2,  `attributes_values` A2
WHERE A2.id_product = P2.id
AND A2.id_attribute =54
AND A2.value = A.value ) 
AND A.id_attribute =54
GROUP BY A.value
LIMIT 0 , 30

预期结果如下:

P.id (product ID) | A.value (model ID)
-----------------------------------------
1245              | AGRIMAX FORCE
1250              | AGRIMAX FORTIS
1255              | AGRIMAX TERIS
1257              | AGRIMAXSIRIO
1908              | ALENZA
1927              | ALENZA PLUS
1259              | AMAX SPARGO
1261              | AMAX TERIS
2                 | ARMORMAXMSD

如何在不改变表格设置方式的情况下更快地进行查询?

1 个答案:

答案 0 :(得分:0)

如果您无法提供有关表格的信息,很难给出正确答案,但如果MySQL存在问题,您可以通过这种方式简化查询

SELECT P.id, A.value FROM `products` P, LEFT JOIN `attributes_values` A ON  A.id_product = P.id WHERE A.id_attribute =54 ORDER BY price LIMIT 0 , 30

然后,在循环结果时,检查价格并在价格与您已解析的价格不同时打破循环。

通过在价格字段上添加索引,您的查询可能会很快加快......