2011-03-25 275 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数据库。 您可能想优化您的查询或数据库结构。