1. 程式人生 > >php從mysql讀取超過200W行的表

php從mysql讀取超過200W行的表

需要從一個大表,如user表中讀取所有user資料再做整理並匯出csv。如果使用框架會報記憶體不足,因為很多php框架會將資料庫資料放入臨時變數。

PHP Fatal error:  Allowed memory size of xxxxxx bytes .....

解決辦法:
1 可以用mysql_unbuffered_query 這個api不使用客戶端快取,這樣就不存在php記憶體分配的問題。再使用mysql_fetch_assoc 逐行獲取資料
2 根據userID批量處理,分批匯出多個csv檔案。
3 使用臨時表儲存資料,再從臨時表匯出csv。

結合第1和第3點處理,原本6個小時才能生成的資料,優化後不到10分鐘匯入到臨時表,很快就導出到csv了。


參考:https://www.oschina.net/question/251494_127915?sort=default&p=1#answers