我使用 PHP Mysql。这是我的查询,其加载时间约为 3-4 分钟。我如何才能将其加载到 1 分钟以下。
SELECT buyer.Buyer, ordr.ordr, ordr.Ship_Date, colour.Colour,
sewing_effi.OP, sewing_effi.HEL, sewing_effi.Target, sewing_effi.TWH,
SUM(v_ci_input.qc_pass) AS Input,
SUM(sewing_input_daily.qc_pass) AS DInput,
SUM(sewing_output.Recieved) AS Recv,
SUM(sewing_output.QC_Pass) AS Toutput,
SUM(sewing_output_daily.QC_Pass) AS Doutput,
floor_line.Line,
floor_line.floor
FROM v_ci_input
LEFT JOIN buyer
ON v_ci_input.Buyer=buyer.CBuyer
LEFT JOIN ordr
ON v_ci_input.Buyer=ordr.CBuyer AND
v_ci_input.Ordr=ordr.COrdr
INNER JOIN colour
ON v_ci_input.Buyer=colour.CBuyer AND
v_ci_input.Ordr=colour.COrdr AND
v_ci_input.Colour=colour.CColour
LEFT JOIN sewing_input_daily
ON v_ci_input.Barcode=sewing_input_daily.Barcode
LEFT JOIN sewing_output_daily
ON v_ci_input.Barcode =sewing_output_daily.Barcode
LEFT JOIN sewing_output
ON v_ci_input.Barcode = sewing_output.Barcode
RIGHT JOIN floor_line
ON floor_line.Line= v_ci_input.Line
JOIN sewing_effi
ON floor_line.Line=sewing_effi.Line
WHERE Ship_Status=0 AND floor_line.Line in('301')
AND sewing_effi.DT=CURDATE()
GROUP BY floor_line.Line,
v_ci_input.Buyer,
v_ci_input.Ordr,
v_ci_input.Colour
ORDER BY floor_line.Line ASC"
最佳答案
第一条规则:检查您要加入的列上是否有有效且有用的索引。这是最常见的错误,通常也是最大的性能损失。重写您的查询以仅使用 LEFT JOIN
,并尽可能避免 OUTER JOIN
。
没有详细的描述,不可能给出什么好的建议。您知道正在使用什么执行计划吗?数据的大小和分布统计是怎样的?每列的实际含义是什么以及您想对查询执行什么操作?您有多少 RAM、CPU 和磁盘是什么?数据库优化是一个庞大而复杂的话题...
关于Mysql查询减少加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46842983/