作者carlcarl (carl)
看板PHP
標題Re: [請益] 如何減少 寫入 資料庫的時間
時間Thu Aug 11 03:39:26 2011
※ 引述《dj31416 (失望帶點絕望)》之銘言:
: 我是自學PHP的新手
: 程式流程大約
: 是
: 迴圈(1.更新a資料表最後一筆資料->2.取出全部資料全部寫入b資料表->計算->輸出->
: 刪除b資料表)
: 如此重複大約一千次 資料數約一千筆
: 這樣要花掉大約10分鐘的時間
: 若不做資料表更新 單純取出資料表b所有資料計算一千次 卻非常快速
: 本來以為是輸出的問題 但取消所有的輸出 只有做計算 時間也差不多
: 不知道是不是更新(寫入)資料庫很耗時間 想知道有沒有解決的方法
: 謝謝 :)
我覺得可以看的地方
1. 更新的部分 搜尋有沒有根據索引之類的
2. 寫入的部分是一次寫入1000筆還是1000次1筆
根據我之前看官方的文件 1百萬筆資料 一次輸入一筆 改成一次輸入16筆
時間可以從765秒衝到50秒 關鍵字: Batching operations
另外有點不太懂 後面計算的部分是在計算哪個資料表的資料
a更新完後 直接拿出a表的資料作計算就好啦? 為什麼會用到b資料表?
因為看起來你的b資料表好像沒啥用..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.66.139
1F:→ dj31416:謝謝原po的關鍵字 我是一千次一筆 資料表b是逐筆寫入 08/11 04:17
2F:→ dj31416:資料表a的計算結果 最後再利用資料表b的數據 再做一次計 08/11 04:18
3F:→ dj31416:算 不知道這樣處理正不正確 因為資料表a是讀取csv寫入的 08/11 04:19
4F:→ dj31416:的原始data 一方面想說不要去更動 才有寫入另一資料表(b) 08/11 04:19
5F:→ dj31416:的想法 08/11 04:19
6F:推 LaPass:CSV!? ( ̄□ ̄|||)a 怎麼會有這個東西? 08/11 04:21
7F:→ dj31416:Opps!! 我還以為自己打錯字 可是我的檔案是.csv沒錯耶yo! 08/11 04:25
8F:→ dj31416:讀取csv寫入資料表a 很快 就是後面的計算再寫入 要等好久 08/11 04:27
9F:推 LaPass:因為一開始會認為你是連線到資料庫去作操作,但現在看起來 08/11 04:28
10F:→ LaPass:,好像是用PHP讀取檔案來作計算的樣子? 08/11 04:28
11F:→ carlcarl:為什麼不直接拿a的計算結果直接再做一次計算? 08/11 04:29
12F:→ dj31416:喔喔不不! 那個在計算前就已經都做好了 我分兩步做 08/11 04:30
13F:→ carlcarl:而要存到b之後再讀出來再做一次計算? 08/11 04:30
14F:→ dj31416:所以應該是連線到資料庫因為我一直輸入mysql_query:)是嗎? 08/11 04:30
15F:→ dj31416:對 要用b記錄的結果 再做一次計算 08/11 04:31
16F:→ carlcarl:可是你b的資料表不就是從a的計算結果來的嗎 08/11 04:38
17F:→ carlcarl:那為何不乾脆用php計算完a的計算結果後 再算一次就好? 08/11 04:39
18F:→ dj31416:對耶! 我怎麼轉不過來! 先存入array再全部一次寫入 應 08/11 04:51
19F:→ dj31416:該就會快多了 好興奮喔!! :D 08/11 04:51