2016-03-11 52 views
0

我試圖插入多個記錄使用單個MySQL查詢,但我不想一次插入大量的記錄。如何使用mysql和php執行批處理操作

下面的代碼獲取,buildes並插入記錄

if(is_array($id_rec)){ 
     $values = ""; 
     foreach($id_rec as $key=>$value){ 
      $values .= "(".(int)$value.",".(int)$id_group."), "; 
     } 
     $values = rtrim($values,", "); 
     $sql = "INSERT IGNORE INTO fu_rec_group_link (id_rec, id_group) VALUES ".$values; 
     $GLOBALS['db']->execute($sql); 

我這裏有兩個問題。

  1. 第一個問題: 我應該一次插入多少條記錄?什麼是適量?
  2. 第二個問題: 如何在達到記錄的最大限制後暫停/斷開循環並插入記錄,然後繼續離開我?

任何幫助將不勝感激。

+0

限制取決於您的服務器。詢問你的提供者。要在一段時間後繼續運行 - 試試'sleep()':http://php.net/manual/en/function.sleep.php – Qrzysio

+0

如果你可以通過命令行運行你的腳本,這是一個典型的commanline-job。否則,你可以使用ajax來執行分步查詢 – fusion3k

+0

@Qrzysio我正在談論限制記錄一次插入而不是時間限制。我不認爲你明白我想解釋什麼,可能是我沒有解釋清楚。但是,我試圖一次插入1000條記錄,並且如果記錄超過1000個記錄,則使用另一個插入查詢繼續記錄其餘記錄。 – Shaonline

回答

1

您應該在單個INSERT中插入儘可能多的記錄,而不是將其分解爲許多INSERTS。

例如,做

INSERT INTO mytable (column1, column2, column3) 
VALUES ('text', 'text', 'text'), 
     ('text', 'text', 'text'), 
     ('text', 'text', 'text'), 
     ('text', 'text', 'text'); 

比做

INSERT INTO mytable (column1, column2, column3) 
VALUES ('text', 'text', 'text'), 
     ('text', 'text', 'text'); 
INSERT INTO mytable (column1, column2, column3) 
VALUES ('text', 'text', 'text'), 
     ('text', 'text', 'text'); 

在性能上的差異合計更顯着的行數上升較快。

+0

即使有我不知道100,000條記錄? – Shaonline

+1

@Shaonline如果您的多個INSERTS之間沒有停頓,您最好在一個INSERT中執行它們 –