記事本   >>  網站技術
PHP 優化筆記-SQL 可以一次寫入就不要分批寫入
在一開始寫 php + sql 的時候因為案子都不大,因此對於資料庫存取速度幾乎都靠系統速度暴力硬上,反正也感受不出差異。

在一次幫朋友寫一個臨時性的專案中發現一個問題:當資料筆數很大時,資料庫輸入的速度會變得很慢。

從這當中查到的問題是硬碟不斷的在讀寫,於是寫了一段程式碼追蹤後發現速度的瓶頸就出在硬碟 I/O 上,這時候換硬碟嗎?當然不!臨時的專案是沒那樣的預算。於是再仔細分析數據後發現,果然資料庫雖然快,但還是受限於儲存裝置檔案讀寫的速度。舉例來說:

$my_array = array(
       '阿德'=>92,
       '阿發'=>82,
       '阿財'=>67,
       '阿笨'=>100,
       '阿黑'=>53);
foreach ($my_array as $v){
     $sql = "insert into AAA(name, value) values($v[0], $v[1] )";  //這是示意,千萬不要照抄,會出安全漏洞的!
    mysql_query($sql);
}

這樣的寫法,就會讓硬碟開啟、寫入、關閉、開啟、寫入、關閉,如此重複5次。


換個方式來寫:
foreach ($my_array as $v){
    $sql_array = " ($v[0], $v[1]) ";
}
mysql_query(" insert into AAA (name,value) values " . implode(',' , $sql_array) );

這樣就可以先在記憶體中把要輸入的資料轉成一整句 sql 語法,而硬碟只需做一次開啟、寫入、關閉就可以完成,如此就可以省下大量的時間、也能延長硬碟的壽命。


進階搜尋
找商品說明
價錢: -
此分類無可選擇屬性

會員登入