[英]DIfferent MySQL behaviour from MySQL query from PHP and directly at 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.