不要使用mysql_*接口!
SELECT Line
FROM sewing_effi
WHERE DT='$dt'
ORDER BY Line ASC"
DT 的数据类型是什么? (请提供SHOW CREATE TABLE)
假设DT 是DATE,那么您需要INDEX(DT, Line) 以提高效率。
为此:
SELECT buyer.Buyer,ordr.ordr,ordr.Ship_Date,colour.Colour,sewing_effi.OP,
sewing_effi.HEL,sewing_effi.Target,sewing_effi.TWH,sewing_effi.Line,
sid_cutting_inventory.DT,
SUM(cutting_inventory.qc_pass) AS Input,
SUM(sewing_output.QC_Pass) AS Toutput, SUM(sewing_output.Recieved) AS Recv
FROM cutting_inventory
INNER JOIN sid_cutting_inventory
ON cutting_inventory.SID=sid_cutting_inventory.SID
LEFT JOIN buyer ON cutting_inventory.Buyer=buyer.CBuyer
LEFT JOIN ordr ON cutting_inventory.Buyer=ordr.CBuyer
AND cutting_inventory.Ordr=ordr.COrdr
INNER JOIN colour ON cutting_inventory.Buyer=colour.CBuyer
AND cutting_inventory.Ordr=colour.COrdr
AND cutting_inventory.Colour=colour.CColour
LEFT JOIN sewing_output ON sewing_output.Barcode=cutting_inventory.Barcode
JOIN sewing_effi ON sewing_effi.Line=sid_cutting_inventory.Line
WHERE sewing_effi.Line ='$li'
AND sewing_effi.DT='$dt'
AND ordr.Ship_Status='0'
AND sid_cutting_inventory.Challan_Close_SS='0'
AND sid_cutting_inventory.DT NOT BETWEEN '2017-01-31 7:00:00'
AND '2018-03-31 23:00:00'
GROUP BY sewing_effi.Line, buyer.Buyer, ordr.ordr,colour.Colour
ORDER BY sewing_effi.Line"
)
我觉得将LEFT JOIN 和INNER JOIN 混合在一起很混乱。请提供EXPLAIN SELECT ...我会做一些猜测。
sewing_effi: INDEX(Line, DT) -- in either order
sid_cutting_inventory: INDEX(Challan_Close_SS, DT) -- in this order
您是否安装了 32 位或 64 位版本的 MySQL?