php mysql 查询时间_PHP-MySQL查询需要大量时间才能执行
我正在開發時間表應用程序,并編寫PHP代碼以提取所有時間表直到日期.這是我為獲取時間表而編寫的查詢-
選擇a.accnt_name,u.username,DATE_FORMAT(t.in_time,’%H:%i’)inTime,DATE_FORMAT(t.out_time,’%H:%i’)outTime,DATE_FORMAT(t.work_time,’%H :%i’)工作時間,w.wrktyp_name,t.remarks,DATE_FORMAT(t.tmsht_date,’%d-%b-%Y’)tmshtDate,wl.loctn_name,s.serv_name,t.status_code,t.conv_kms convkms ,t.conv_amount從時間表t,帳戶a,服務s,工作類型w,工作位置wl,用戶WHERE a.accnt_code = t.accnt_code和w.wrktyp_code = t.wrktyp_code和wl.loctn_code = t.loctn_code和s.serv_code = t.serv_code和t.usr_code = u.按tmsht_date desc排序
where子句包含從各個表中獲取各個代碼的實際值的子句.
問題在于此查詢需要花費大量時間來執行,并且應用程序在幾分鐘后崩潰.
我在phpmyadmin中運行了此查詢,在這里它沒有任何問題.
需要幫助來了解執行速度緩慢背后的原因.
解決方法:
使用EXPLAIN查看查詢的執行計劃.確保MySQL有合適的可用索引,并且正在使用這些索引.
查詢文本似乎缺少此處的列名…
t.usr_code = u. ORDER
^^^
我們可以“猜測”應該是u.usr_code的代碼,但這只是一個猜測.
應該返回多少行?結果集有多大?
您的客戶端是否要嘗試將所有行“存儲”在內存中,并因為內存不足而崩潰?
如果是這樣,我建議您避免這樣做,并在需要時獲取行.
或者,考慮在WHERE子句中添加一些其他謂詞,以僅返回所需的行,而不返回表中的所有行.
現在是2015年.該放棄老式的逗號語法進行聯接操作了,改為使用JOIN關鍵字,并將聯接謂詞從WHERE子句移到ON子句.并格式化它.數據庫不在乎,但是它將使需要解密您的SQL語句的可憐的靈魂變得更容易.
SELECT a.accnt_name
, u.username
, DATE_FORMAT(t.in_time ,'%H:%i') AS inTime
, DATE_FORMAT(t.out_time ,'%H:%i') AS outTime
, DATE_FORMAT(t.work_time,'%H:%i') AS workTime
, w.wrktyp_name
, t.remarks
, DATE_FORMAT(t.tmsht_date, '%d-%b-%Y') AS tmshtDate
, wl.loctn_name
, s.serv_name
, t.status_code
, t.conv_kms AS convkms
, t.conv_amount AS convamount
FROM timesheets t
JOIN accounts a
ON a.accnt_code = t.accnt_code
JOIN services s
ON s.serv_code = t.serv_code
JOIN worktypes w
ON w.wrktyp_code = t.wrktyp_code
JOIN work_location wl
ON wl.loctn_code = t.loctn_code
JOIN users
ON u.usr_code = t.usr_code
ORDER BY t.tmsht_date DESC
在格式化日期列上的排序非常奇怪.您更有可能希望結果以“日期”順序返回,而不是以年份前的月份和日期的字符串順序返回. (您真的要在年份之前先按日值排序嗎?)
跟進
如果這個完全相同的查詢很快完成,并且整個結果集(大約720行)來自另一個客戶端(同一數據庫,同一用戶),則該問題很可能不是此SQL語句.
我們不希望執行SQL語句導致PHP“崩潰”.
如果要存儲整個結果集(例如,使用mysqli store_result),則需要具有足夠的內存.但是選擇列表中的13個表達式看起來都比較短(格式化的日期,名稱和代碼),并且我們不希望“備注”超過2 KB.
正如其他人所建議的那樣,要調試此功能,請嘗試在查詢中添加LIMIT子句,例如LIMIT 1并觀察其行為.
或者,使用虛擬查詢進行測試;使用保證返回特定值和特定行數的查詢.
SELECT 'morpheus' AS accnt_name
, 'trinity' AS username
, '01:23' AS inTime
, '04:56' AS outTime
, '00:45' AS workTime
, 'neo' AS wrktyp_name
, 'yada yada yada' AS remarks
, '27-May-2015' AS tmshtDate
, 'zion' AS loctn_name
, 'nebuchadnezzar' AS serv_name
, '' AS status_code
, '123' AS convkms
, '5678' AS convamount
我懷疑查詢不是您觀察到的行為的根本原因.我懷疑問題出在代碼的其他地方.
https://www.icode9.com/content-2-529101.html
總結
以上是生活随笔為你收集整理的php mysql 查询时间_PHP-MySQL查询需要大量时间才能执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比人都高!博主打造世界最大Xbox主机:
- 下一篇: linux cmake编译源码,linu