我有一个查询,在产品价格和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
如何在不改变表格设置方式的情况下更快地进行查询?
答案 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
然后,在循环结果时,检查价格并在价格与您已解析的价格不同时打破循环。
通过在价格字段上添加索引,您的查询可能会很快加快......