0

我正在尝试使用 4 个查询来查询我的数据库,每个查询都会给我我需要但我遇到的行数,但是我注意到当我在服务器上执行查询时,一切都运行得很快(相对而言),但是如果我让它成为一个相对简单的服务器,我应该得到最长的工作时间(30 秒,限制执行时间(PHP))。
我的 while 循环使用 MokedCcode 列表,每个 MokedCcode 进入查询并转到下一个 MokedCcode。
注意:
1) 我知道它将与 MokedCcode-s 的数量成正比。
2)我需要增加执行时间限制吗?

1)有更有效的方法来进行这些查询吗?也许我没有正确使用 mysql 功能。
例如第一个名为 $emerg 的查询,该查询需要给我日期之间的行数,其中 WCODE 的优先级为 1,并且必须与两个表( t 和 e )上的 MokedCcode 匹配。

$emerg = mysql_num_rows(mysql_query("SELECT  t.*,e.DISCODE,e.AREA,e.COLOR,e.PRIORITY FROM    $tbl_name AS t   
 LEFT JOIN eventcodes AS e ON t.MokedCcode = e.MokedCcode AND t.WCODE=e.WCODE  
 WHERE (t.MokedCcode='$MokedCcode' ) AND e.PRIORITY='1' 
 AND t.ndate BETWEEN '$start' AND '$end' ORDER By `id` DESC "));


此外,我还添加了 3 个查询,我想获得一些建议如何让它更快,或者我没有任何选择并保持这样。

其他 3 个查询:

    $regular = mysql_num_rows(mysql_query("SELECT  t.*,e.DISCODE,e.AREA,e.COLOR,e.PRIORITY FROM $tbl_name AS t    
    LEFT JOIN eventcodes AS e ON t.MokedCcode = e.MokedCcode AND t.WCODE=e.WCODE  
    WHERE (t.MokedCcode='$MokedCcode' ) AND e.PRIORITY!='1' 
    AND t.ndate BETWEEN '$start' AND '$end' ORDER By `id` DESC "));

    $regHandled = mysql_num_rows(mysql_query("SELECT  t.*,e.DISCODE,e.AREA,e.COLOR,e.PRIORITY FROM $tbl_name AS t  
    LEFT JOIN eventcodes AS e ON t.MokedCcode = e.MokedCcode AND t.WCODE=e.WCODE 
    WHERE (t.MokedCcode='$MokedCcode' ) AND e.PRIORITY!='1' 
    AND t.EventHandling!='0' AND t.ndate BETWEEN '$start' AND '$end' ORDER By `id` DESC "));

    $emergHandled = mysql_num_rows(mysql_query("SELECT  t.*,e.DISCODE,e.AREA,e.COLOR,e.PRIORITY FROM $tbl_name AS t  
    LEFT JOIN eventcodes AS e ON t.MokedCcode = e.MokedCcode AND t.WCODE=e.WCODE  
    WHERE (t.MokedCcode='$MokedCcode' ) AND e.PRIORITY='1'
    AND t.EventHandling!='0' AND t.ndate BETWEEN '$start' AND '$end' ORDER By `id` DESC "));
4

1 回答 1

0

我不完全了解您要达到的目标。

如果您只想要计数为什么要选择所有行?你不能使用COUNT()MySQL功能吗?将所有数据获取到脚本然后计算行数总是很慢。

即使您想选择所有这些列,请尝试使用t.field1, t.field2, ...而不是t.*

于 2013-07-03T05:32:32.510 回答