PHP mysqli_query 花费的时间太长

标签 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 秒才能完成。

还有其他解决方案吗?
导致执行时间过长的原因有哪些?

谢谢

最佳答案

这是您的查询:

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 BYSELECT *,并以某种方式神奇地期望MySQL 准确地找出您打算用于未聚合列的行。尽管 MySQL 文档关于这一点非常明确。

关于PHP mysqli_query 花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616879/

相关文章:

php - 使用 PHP Levenshtein 比较 5000 个字符串

php - 使用 HIPHOP 编译 PHP

php - 如何从两个 MySQL 表中显示用户

mysql - 带断线的 django + mysql 文本字段格式

mysql - SQL:如何从两个表中获取关系数据? (使用 JOIN ?)

SQL Select 语句返回同一表中下一个日期时间的分钟差异

php - PDOExeption SQLSTATE[HY001] 无法分配足够的内存

php - 想要 Xdebug -- 使用 Win10 WSL Ubuntu 20、vscode 和 Laravel

mysql - GROUP BY 已与两个子查询分组的另一个表

python - 如何在 SQLAlchemy 中查询关联表?