我有一個SQL查詢MySql表有百萬條記錄。這在大約2秒內在phpMyAdmin中執行,但是從PHP腳本運行時,它不會完成執行。MySql查詢執行需要從PHP永遠,但很快從phpMyAdmin運行完成
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());
有mysql中的連接和相關的東西沒有問題,因爲我成功地運行了很多其他的查詢。我在meter_id和Date,Time一起設置了索引。 slno是自動增量值。 我知道還有類似的問題,因爲我發現我的研究很多,但他們都沒有幫助我。如果有人能幫我找到解決方案,請提前致謝。
查詢描述:查詢包含數百萬條記錄和THD_A_N_AVG,meter_id,slno,日期和時間在內的power_logger表格。這將從兩個連續的行中選擇日期和時間,在slnos範圍內,THD_A_N_AVG之間的差值大於或等於2.當這些日期被提取時,它甚至必須在不同的slnos範圍內獲取日期和時間日期和時間最接近先前提取的時間,從而形成har_date_from,har_date_to,cur_date_from,cur_date_to。 這裏弄的是嵌套選擇。
請使用您正在使用的php代碼更新您的問題..我們無法理解此查詢的任何內容...更新詳細信息 – Damodaran
由於查詢在phpmyadmin中執行,因此問題可能不在查詢中。 ..你的php代碼是什麼? – Damodaran
@達摩達蘭:謝謝你的快速回復。我已經更新了這個問題,包括php腳本,這是一個簡單的mysql連接和查詢功能。 – Rohith