我这里有个问题。这是我的代码
$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 秒才能完成。
还有其他解决方案吗?
导致执行时间过长的原因有哪些?
谢谢
最佳答案
这是您的查询:
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';
您可能会说:“哦,这会返回不同的值。”但是,这是因为您的查询基于不确定结果。您有带有GROUP BY
的SELECT *
,并以某种方式神奇地期望MySQL 准确地找出您打算用于未聚合列的行。尽管 MySQL 文档关于这一点非常明确。
关于PHP mysqli_query 花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616879/