PHP mysqli_query花了太长时间

时间:2016-02-25 02:02:09

标签: php mysql sql mysqli

我在这里遇到了问题。这是我的代码

$res = mysqli_query($conn, "SELECT * FROM ( SELECT * FROM ( SELECT m.subnum, ma.cd 
FROM tr_mcerr AS m LEFT JOIN tr_mcerract AS ma ON m.subnum = ma.subnum 
order by ma.dtact DESC ) AS A GROUP BY A.subnum ) 
AS B WHERE B.cd = '01'") or die(mysqli_error($conn));

$totalRows_1 = mysqli_num_rows($res);

如您所见,我只想获得行数。现在的问题是,仅此代码大约需要2秒钟才能完成。还有5个这样的代码,但有不同的表和字段。所以,只需要完全加载页面大约需要13秒才能完成。

还有其他解决办法吗?
可能导致执行时间过长的原因是什么?

由于

1 个答案:

答案 0 :(得分:1)

这是您的查询:

SELECT *
FROM (SELECT *
      FROM (SELECT m.subnum, ma.cd 
            FROM tr_mcerr AS m LEFT JOIN
                 tr_mcerract AS ma
                 ON m.subnum = ma.subnum 
           order by ma.dtact DESC
          ) AS A
     GROUP BY A.subnum
    ) AS B
 WHERE B.cd = '01';

如果您只想要行数,那真是一团糟!对于许多子查询和那不必要的ORDER BY

这是一个更简单的版本:

SELECT COUNT(DISTINCT m.subnum)
FROM tr_mcerr m LEFT JOIN
     tr_mcerract ma
     ON m.subnum = ma.subnum 
WHERE b.cd = '01';

您可能会说:“哦,这会返回不同的值。”但是,这是因为您的查询基于不确定结果。你有SELECT * GROUP BY并且不知何故神奇地期望MySQL确切地找出你打算用于非聚合列的哪一行。尽管MySQL文档在这一点上非常明确。