我有这个查询基本上经历了一堆表格,让我得到一些格式化的结果,但我似乎无法找到瓶颈。最简单的瓶颈是ORDER BY RAND()
,但性能仍然不佳。MySQL缓慢查询〜10秒
查询需要10秒到20秒没有ORDER BY RAND()
;
SELECT
c.prix AS prix,
ST_X(a.point) AS X,
ST_Y(a.point) AS Y,
s.sizeFormat AS size,
es.name AS estateSize,
c.title AS title,
DATE_FORMAT(c.datePub, '%m-%d-%y') AS datePub,
dbr.name AS dateBuiltRange,
m.myId AS meuble,
c.rawData_id AS rawData_id,
GROUP_CONCAT(img.captionWebPath) AS paths
FROM
immobilier_ad_blank AS c
LEFT JOIN PropertyFeature AS pf ON (c.propertyFeature_id = pf.id)
LEFT JOIN Adresse AS a ON (c.adresse_id = a.id)
LEFT JOIN Size AS s ON (pf.size_id = s.id)
LEFT JOIN EstateSize AS es ON (pf.estateSize_id = es.id)
LEFT JOIN Meuble AS m ON (pf.meuble_id = m.id)
LEFT JOIN DateBuiltRange AS dbr ON (pf.dateBuiltRange_id = dbr.id)
LEFT JOIN ImageAd AS img ON (img.commonAd_id = c.rawData_id)
WHERE
c.prix != 0
AND pf.subCatMyId = 1
AND (
(
c.datePub > STR_TO_DATE('01-04-2016', '%d-%m-%Y')
AND c.datePub < STR_TO_DATE('30-04-2016', '%d-%m-%Y')
)
OR date_format(c.datePub, '%d-%m-%Y') = '30-04-2016'
)
AND a.validPoint = 1
GROUP BY
c.id
#ORDER BY
# RAND()
LIMIT
5000
这里是解释查询:
这里是mysqltuner
编辑1
我有许多指标在这里,他们是:
编辑2:
所以,你们做到了。降至.5秒至2.5秒。
我主要遵循了所有的建议,并更改了一些my.cnf + runned优化在我的表上。
你是否仅仅通过主表来尝试查询?从只有一张表“immobilier_ad_blank AS c”开始。这将在你的where子句中运用很多部分。然后添加下一个表以完成where子句并查看您的位置。我的直觉是where子句放慢速度的日期格式。 –
请编辑您的问题以显示表格中的索引,也可能是行数。 –
@OllieJones完成。 – delmalki