2014-01-12 34 views
0

我有機會以兩種方式插入大量數據(每5分鐘大約30行):使用MySQL插入多次或1個大查詢?

A)使用PHP構建一個插入函數,並且對於每個新數據只需調用該函數並插入30倍

B)使用PHP和通過附加到SQL字符串每個總線建立一個大的查詢,然後只能插入一次

哪一個是更有效?

+0

B是。數據庫服務器只能處理一個操作。 – suspectus

回答

1

做個別插入或批量插入的問題 - 在這種情況下 - 不應該主要關於性能。任何數據庫應該能夠處理6個記錄/分鐘的插入速率。

正如在評論和其他答案中提到的,對數據庫的單個調用將需要比多次調用更少的整體時間的。但是,這種批量裝載有什麼缺點?

是的,有。首先,雖然總體插入需要較少的時間,但這一切都發生在一個時期。所以,表/行被鎖定的時間段實際上更長。這種鎖定會干擾其他查詢。換句話說,大容量裝載可能會導致性能偶爾出現問題。

然而,更重要的考慮因素是將數據存儲在符合ACID的數據庫中。如果應用程序在批量插入前發生故障,會發生什麼情況?你願意接受數據丟失嗎?通過單個更新,一旦插入成功完成,就知道每條記錄都進入數據庫。對於批量更新,您必須接受數據丟失或實施其他機制來阻止數據丟失。

作爲一般規則,最好在啓動過早優化之前讓代碼正常工作。由於更新數量仍然很小,我認爲這是一個不成熟的優化,單個更新可能是一條可行的路線。

+0

我完全同意你的看法,並希望有人爲個別插入提出一個很好的論點。謝謝你的回答! – jskidd3

1

由於數據庫調用較少,第二個選項效率更高。

你可以嘗試下面的內容。

insert into table imatable values (something, something, something), (somethingelse, somethingelse, somethingelse), (etc, etc, etc)