2013-02-02 127 views
1

與性能相關:插入多行SQL

是更好地使1000個查詢,插入1000行:

for($i=1;$i<=1000;++$i){ 
     $query = 'insert into table1 (First,Last) values ("Fred","Smith")'; 
     mysql_query($query); 
    } 

還是要使用PHP創建一個查詢(在for循環串聯值)像這樣:

$query = ' insert into table1 (First,Last) values ("Fred","Smith"), 
     ("John","Smith"), 
     ... 
     ("Michael","Smith"), 
     ("Robert","Smith")'; 
    mysql_query($query); 

鑑於可能有很多值,我一次選擇插入10個值。我不知道這沒關係,在這種情況下最好的做法是什麼?

回答

6

第二個比較好。連接到數據庫非常昂貴。

另一種說法是,速度更快?讓1000次旅行減少1000箱或一次旅行減少1000箱?

+0

但是,如果卡車不夠大,無法安裝所有這些箱子呢? :)(查詢大小限制?) – Cristy

+2

@Cristy然後將其分成包含每個框的最大數量的最小行程數。仍然快於1000次旅行。 –

0

第二是更好的,你有多大的控制權,第一U不要有太多的控制要插入不同的值

3

這個問題,我想,回答不夠好​​,在official site

如果您要同時從同一客戶端插入多行,則 將使用具有多個VALUES列表的INSERT語句一次插入多個 行。這比使用單獨的單行INSERT語句快得多(在某些 的情況下快了很多倍)。

雖然我會建議整個頁面,因爲它列出了優化多插入(針對不同類型的引擎)的幾種策略。然而,在最後它提到...

INSERT仍比LOAD DATA INFILE裝載數據,要慢得多隻使用概述的戰略,即使 。

......這是相當真實的:如果你需要一些巨大的(但靜態的)數據集被加載到數據庫中,請改用LOAD DATA INFILE語句。

0

其簡單,成批處理的成本低於逐個處理。它的全部成本都在頭上,這裏是性能方面的資源。