2016-11-25 149 views
-4

基本思想是每一行都有一個唯一的項目ID,我用它來決定更新哪一行,並用數量更新它。我從一家公司的api導入庫存到我自己的數據庫中,並且有大約80k個項目。他們爲項目細節和項目數量分開api端點,因此我需要先從第一個端點獲取所有庫存,然後再調用第二個庫存並更新所有項目的數量。更新數據庫中多行的最快方法是什麼?

我最初的解決方案是循環,雖然我得到的結果和每個查詢更新一行。這需要大約一個小時到一個半小時來更新所有80k項目。這只是需要多長時間來更新這麼多的項目,或者是否有我可以做的任何SQL魔法?

謝謝

+0

你不能使用SQL'where'子句決定哪些行要更新。 SQL實際上不應該像這樣使用。 –

+1

http://stackoverflow.com/a/20635881/284240 –

+0

@DannyCullen是的,這就是我說我正在做的事情,並且對於那麼多的記錄來說性能是可怕的。 sql如何不被用來更新db中的行? – stackOverNo

回答

1

我會做的第一件事是將更新數據存儲在一個單獨的表中。然後運行查詢,例如:

update t 
    set . . . 
    from t join 
     results r 
     on t.?? = r.??; 

假設用於join列是索引的,那麼這應該是一個多小時半更快。

+0

另一個不是MySQL的數據庫支持散列連接。不僅僅是索引是不需要的,如果用於大容量,它們將會導致性能下降。對於80k行,假設「標準」平均行大小,更新將不到一秒鐘。 –

相關問題