2011-03-25 274 views
1

我做了一些數據庫使用Phpmyadmin。我可以運行它之前,但我嘗試了一些複雜的查詢後運行非常緩慢。Phpmyadmin運行非常緩慢

我必須等待大約5分鐘才能獲得計數結果。但對於簡單的查詢它運行良好。 爲什麼會發生?我能解決這個問題嗎?

我該怎麼做?


SELECT X.id,X.Line,X.Model,X.Lot_no,X.Lot_Quantity, 
          X.Merchandise AS Merchandise, 
          X.Merchandise-X.Lot_Quantity AS Balance 
        FROM(
         SELECT A.Inspection_datetime,A.id,A.Line, A.Model,     
           A.Lot_no,B.Lot_Quantity, 
           IF(RIGHT(A.Range_sampling,4)='0000',10000, 
           RIGHT(A.Range_sampling,4))-MID(Range_sampling,5,4)+1 
           AS Merchandise 
         FROM inspection_report A 
         LEFT JOIN prod_sch B 
         ON A.Line= B.Line_Name AND A.Model = B.Model_Code 
         AND A.Lot_no= CONCAT(LPAD(CAST(B.Lot_No_ AS CHAR),3,'0'),'A') 
         WHERE MONTH(A.Inspection_datetime) = MONTH(CURRENT_DATE) 
         AND YEAR(A.Inspection_datetime) = YEAR(CURRENT_DATE) 
         GROUP BY A.Line, A.Model,A.Range_sampling) X 
GROUP BY X.Model 
+0

您需要顯示一些表格數據,您正在使用的查詢以及您處理的行數 - 幾十,幾千,幾百萬? – 2011-03-25 09:34:38

+2

你的問題是在數據庫中,而不是在phpMyAdmin。您應該發佈查詢代碼,也許我們可以幫助您優化它。 – weltraumpirat 2011-03-25 09:35:55

+0

太多MYSQL關鍵字 'IF' 'RIGHT' 'MID' 'CONCAT' 'LPAD' 'CAST' 'MONTH' 'YEAR'只是顯示你的表結構和輸出結果ü希望和方式你想提取臨時數據 – diEcho 2011-03-25 10:25:23

回答

1

包含您的查詢multiple join和許多where condition ??那麼你必須在ONWHERE子句中使用的選定屬性上創建索引。

BTW ...顯示你的表結構以及您查詢......然後就可以提供更好的解決方案

使指數在你的桌子下面的屬性

線,型號, Lot_no,Inspection_datetime,range_sampling( 表:insepection_report) LINE_NAME,Model_code(表:prod_sch )

注:

嘗試用SELECT前講解和看到的結果

+0

我正在使用左連接。 – klox 2011-03-25 09:48:23

+0

哪SELECT?第一選擇還是第二? – klox 2011-03-25 10:07:30

+0

@Klox第一個 – diEcho 2011-03-25 10:10:11

0

您需要創建列indexes這是在where子句中找到行使用。

索引可以快速做到這一點。

1

如果您正在運行復雜的查詢,這大概就是造成延誤,不phpMyAdmin的底層MySQL數據庫。 您可能想優化您的查詢或數據庫結構。