$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秒才能完成。
还有其他解决办法吗?
可能导致执行时间过长的原因是什么?
由于
答案 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文档在这一点上非常明确。