Re: [請益] 如何減少 寫入 資料庫的時間

看板PHP作者 (carl)時間14年前 (2011/08/11 03:39), 編輯推噓2(2017)
留言19則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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

08/11 04:17, , 1F
謝謝原po的關鍵字 我是一千次一筆 資料表b是逐筆寫入
08/11 04:17, 1F

08/11 04:18, , 2F
資料表a的計算結果 最後再利用資料表b的數據 再做一次計
08/11 04:18, 2F

08/11 04:19, , 3F
算 不知道這樣處理正不正確 因為資料表a是讀取csv寫入的
08/11 04:19, 3F

08/11 04:19, , 4F
的原始data 一方面想說不要去更動 才有寫入另一資料表(b)
08/11 04:19, 4F

08/11 04:19, , 5F
的想法
08/11 04:19, 5F

08/11 04:21, , 6F
CSV!? ( ̄□ ̄|||)a 怎麼會有這個東西?
08/11 04:21, 6F

08/11 04:25, , 7F
Opps!! 我還以為自己打錯字 可是我的檔案是.csv沒錯耶yo!
08/11 04:25, 7F

08/11 04:27, , 8F
讀取csv寫入資料表a 很快 就是後面的計算再寫入 要等好久
08/11 04:27, 8F

08/11 04:28, , 9F
因為一開始會認為你是連線到資料庫去作操作,但現在看起來
08/11 04:28, 9F

08/11 04:28, , 10F
,好像是用PHP讀取檔案來作計算的樣子?
08/11 04:28, 10F

08/11 04:29, , 11F
為什麼不直接拿a的計算結果直接再做一次計算?
08/11 04:29, 11F

08/11 04:30, , 12F
喔喔不不! 那個在計算前就已經都做好了 我分兩步做
08/11 04:30, 12F

08/11 04:30, , 13F
而要存到b之後再讀出來再做一次計算?
08/11 04:30, 13F

08/11 04:30, , 14F
所以應該是連線到資料庫因為我一直輸入mysql_query:)是嗎?
08/11 04:30, 14F

08/11 04:31, , 15F
對 要用b記錄的結果 再做一次計算
08/11 04:31, 15F

08/11 04:38, , 16F
可是你b的資料表不就是從a的計算結果來的嗎
08/11 04:38, 16F

08/11 04:39, , 17F
那為何不乾脆用php計算完a的計算結果後 再算一次就好?
08/11 04:39, 17F

08/11 04:51, , 18F
對耶! 我怎麼轉不過來! 先存入array再全部一次寫入 應
08/11 04:51, 18F

08/11 04:51, , 19F
該就會快多了 好興奮喔!! :D
08/11 04:51, 19F
文章代碼(AID): #1EGjvon5 (PHP)
文章代碼(AID): #1EGjvon5 (PHP)