2017-10-20 39 views
0

J'utilise PHP Mysql.Voici ma requête, son temps de chargement environ 3-4 minutes.Comment puis-je le charger ci-dessous 1 minute.Requête Mysql réduire le temps de chargement

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

Est-ce que 'v_ci_input' a' VIEW'? –

+0

Dans quelle table se trouve 'Ship_Status'? (Cela fait une différence de _big_.) –

+0

Je grince des dents à la combinaison de "GAUCHE", "DROIT" et "INTERNE". Je ne sais pas quoi. Le faites vous? Car, que reste-t-il "de la DROITE JOIN"? Juste 'Sewing_output'? Ou tout avant? –

Répondre

0

Première règle: vérifiez que vous avez des index fonctionnels et utiles sur les colonnes que vous rejoignez. C'est l'erreur la plus commune et généralement la plus grande pénalité de performance. Réécrivez votre requête pour utiliser uniquement LEFT JOIN s et essayez d'éviter OUTER JOIN si possible.

Sans description détaillée, il est impossible de donner un bon conseil. Savez-vous quels plans d'exécution sont utilisés? Quelles sont les statistiques de taille et de distribution des données? Que signifie chaque colonne et que voulez-vous faire avec la requête? Combien de RAM avez-vous, quels sont vos processeurs et disques? L'optimisation de base de données est un sujet vaste et complexe ...