2017-10-20 193 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和磁盤是什麼?數據庫優化是一個龐大而複雜的話題......