- 後端在做分析 20 多萬筆的資料,理論上在資料庫應不會反應這麼慢,應該是在於程式的寫法上。
- 後來查找資料才明白,原來 MySQL 有自動快取( query cache )的功用,這也是 MySQL執行會這麼快的原因之一,當接收到一個相同的 SQL Query 時,會直接由先前已分析過的快取直接引用結果,所以才會出現覺得有時快有時慢的錯覺。
- 程式加快的方式應該可以考慮以下兩種做法:
- 使用 MySQL Uses Memory 的方式。
- 事先篩選出需要的資料,將不需要做判斷的資料先刪除。
- 後來重新將程式修改過,改成先刪除不需要的資料,將要分析的資料單獨另外寫到一個獨立的資料表內,再去做分析。分析的時間由原本的 10+ sec 變為 <0.2 sec,真的還差真多。
//程式起始時間
$time_start = getmicrotime();
…...
//放要測試的執行程式
…...
$time_sql = getmicrotime();
$time = $time_sql - $time_start;
echo "執行SQL條件的執行時間 : $time seconds"; //輸出總運行時間
function getmicrotime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
//PHP Timer code EOF
相關資料:
- Highcharts - Interactive JavaScript charts for your webpage
- MySQL Reference Manual for version 4.1.0-alpha.
- MySQL 將資料塞到 memory 的作法