Mysql查询减少加载时间
问题描述:
我使用PHP Mysql.Here是我的查询,它的加载时间大约3-4分钟。如何在1分钟以内加载它。Mysql查询减少加载时间
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
s,尽可能避免OUTER JOIN
s。
没有详细的描述,就不可能给出任何好的建议。你知道执行计划正在使用吗?数据的大小和分布统计是什么?每列实际上意味着什么,以及您想要对查询做什么?你有多少RAM,你的CPU和磁盘是什么?数据库优化是一个庞大而复杂的话题......
'v_ci_input'是一个'VIEW'吗? –
'Ship_Status'在哪个表中? (这是一个大的差异。) –
我对“LEFT”,“RIGHT”和“INNER”的组合感到畏惧。我不知道是什么。你做?因为,“RIGHT JOIN”的“左”是什么?只需'sewing_output'?还是之前的一切? –