2017-10-20 160 views
0

我使用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" 
+0

'v_ci_input'是一个'VIEW'吗? –

+0

'Ship_Status'在哪个表中? (这是一个大的差异。) –

+0

我对“LEFT”,“RIGHT”和“INNER”的组合感到畏惧。我不知道是什么。你做?因为,“RIGHT JOIN”的“左”是什么?只需'sewing_output'?还是之前的一切? –

回答

0

第一条规则:检查您在加入的列上是否有工作且有用的索引。这是最常见的错误,通常是最大的性能损失。重写您的查询以仅使用LEFT JOIN s,尽可能避免OUTER JOIN s。

没有详细的描述,就不可能给出任何好的建议。你知道执行计划正在使用吗?数据的大小和分布统计是什么?每列实际上意味着什么,以及您想要对查询做什么?你有多少RAM,你的CPU和磁盘是什么?数据库优化是一个庞大而复杂的话题......