簡體   English   中英

MySql查詢的執行永遠需要PHP來完成,但是從phpMyAdmin運行時很快就會完成

[英]MySql query execution takes for ever from PHP but finishes soon when run from phpMyAdmin

我有一個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=/*The query above passed as string*/ $mysql=mysql_connect('localhost','username','pwd') or die(mysql_error()); mysql_select_db('dbname',$mysql); $rows=mysql_query($query,$mysql) or die(mysql_error()); $query=/*The query above passed as string*/ $mysql=mysql_connect('localhost','username','pwd') or die(mysql_error()); mysql_select_db('dbname',$mysql); $rows=mysql_query($query,$mysql) or die(mysql_error());

mysql連接和相關內容沒有問題,因為我成功運行了許多其他查詢。 我一起在meter_id和Date,Time上設置了索引。 slno是自動增量值。 我從研究中發現了很多類似的問題,但沒有一個真正對我有幫助。 預先感謝任何人可以幫助我找到解決方案。

查詢描述:該查詢查詢包含數百萬條記錄的power_logger表,並且THD_A_N_AVG,meter_id,slno,Date和Time在表的列中。 這將從連續范圍為slno的兩個連續行中選擇日期和時間,其中THD_A_N_AVG之間的差異大於或等於2。當獲取這些日期時,它甚至必須以不同范圍的slno來獲取日期和時間。日期和時間最接近先前獲取的日期和時間,因此形成har_date_from,har_date_to,cur_date_from,cur_date_to。 搞砸的是嵌套選擇。

通常,PHPMyAdmin在查詢末尾會自動添加“ LIMIT 0,30”,因此您一次只能加載30行。 在您的代碼中,您嘗試一次加載所有內容,這就是為什么要花這么長時間的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM