php - MySql 查询执行需要从 PHP 中永久执行,但从 phpMyAdmin 运行时很快就会完成

标签 php mysql

我有一个 sql 查询包含数百万条记录的 MySql 表。这会在 phpMyAdmin 中执行大约 2 秒,但是当从 PHP 脚本运行时,它不会完成执行。

select 
  concat(p1.`Date`," ",p1.`Time`) as har_date_from,
  concat(p2.`Date`," ",p2.`Time`) as har_date_to,
 (select concat(p3.`Date`," ",p3.`Time`) from 
   power_logger p3 
   where p3.slno between 1851219 and 2042099
   and p3.meter_id="logger1"
   and str_to_date(concat(p3.`Date`," ",p3.`Time`),"%d/%m/%Y %H:%i:%s") >=
       str_to_date(concat(p1.`Date`," ",p1.`Time`),"%d/%m/%Y %H:%i:%s")

   order by p3.slno limit 1) as cur_date_from,
     (select concat(p4.`Date`," ",p4.`Time`) from
        power_logger p4 
        where p4.slno between 1851219 
        and 2042099
        and p4.meter_id="logger1" 
        and str_to_date(concat(p4.`Date`," ",p4.`Time`),"%d/%m/%Y %H:%i:%s") >=
            str_to_date(concat(p2.`Date`," ",p2.`Time`),"%d/%m/%Y %H:%i:%s")
        order by p4.slno 
        limit 1
      )
      as cur_date_to, 
      p1.THD_A_N_Avg-p2.THD_A_N_Avg as thd_diff
      from power_logger p1
    join 
      power_logger p2 
        on p2.slno=p1.slno+1 
        and p1.meter_id="fluke1" 
        and p2.meter_id=p1.meter_id
        and p1.slno between 2058609 and 2062310 
        and p1.THD_A_N_Avg-p2.THD_A_N_Avg>=2.0000

php 脚本: $query=/*上面的查询作为字符串传递*/ $mysql=mysql_connect('localhost','用户名','pwd') 或 die(mysql_error()); mysql_select_db('数据库名称',$mysql); $rows=mysql_query($query,$mysql) 或 die(mysql_error());

mysql 连接和相关内容没有问题,因为我成功运行了很多其他查询。我已经在meter_id和Date,Time上一起设置了索引。 slno 是自动增量值。 我知道也有人提出类似的问题,因为我从研究中发现了很多问题,但没有一个真正对我有帮助。如果有人可以帮助我找到解决方案,请提前致谢。

查询说明:查询包含数百万条记录的 power_logger 表,表中包含 THD_A_N_AVG、meter_id、slno、Date 和 Time 等列。这会选择 slnos 范围内的两个连续行中的日期和时间,其中 THD_A_N_AVG 之间的差异大于或等于 2。当获取这些日期时,它甚至必须获取不同 slnos 范围内的日期和时间其中日期和时间最接近之前获取的一次,从而形成 har_date_from、har_date_to、cur_date_from、cur_date_to。 这里困惑的是嵌套选择。

最佳答案

通常 PHPMyAdmin 会自动在查询末尾添加“LIMIT 0, 30”,因此您一次只能加载 30 行。在您的代码中,您试图立即加载所有内容,这就是为什么它需要这么长时间。

关于php - MySql 查询执行需要从 PHP 中永久执行,但从 phpMyAdmin 运行时很快就会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19626930/

相关文章:

php - 使用嵌套 foreach 循环从 mysql 记录集创建多维数组

mysql - 从另一个表返回单个记录,每个 transactionDate 有多个记录

MySQL-优化查询

php - 在 Controller 中找不到接口(interface) 'Silex\ControllerProviderInterface'

php - 如何处理MySQL中的时区?

php - 从 PHP 脚本发送电子邮件的最佳做法是什么?

mysql - 需要帮助在 mysql 中构建哈希标签趋势查询

php - 使用键/值模式和 Fat Free Framework Mapper

php - 多个段落

php - 交叉引用 MySQL 条目