我有數據包含約30 000條記錄。我需要將這些數據插入到MySQL表中。我將這些數據按1000封裝,然後創建多個插入,如下所示:MySQL多重插入性能
INSERT INTO `table_name` VALUES (data1), (data2), ..., (data1000);
如何優化插入的性能?我可以每次插入超過1000條記錄嗎?每行包含大小約爲1KB的數據。謝謝。
我有數據包含約30 000條記錄。我需要將這些數據插入到MySQL表中。我將這些數據按1000封裝,然後創建多個插入,如下所示:MySQL多重插入性能
INSERT INTO `table_name` VALUES (data1), (data2), ..., (data1000);
如何優化插入的性能?我可以每次插入超過1000條記錄嗎?每行包含大小約爲1KB的數據。謝謝。
你需要檢查MySQL服務器的配置和專門檢查緩衝區大小等
您可以從表中如果有刪除索引,使其更快。創建數據所在的索引。
看看這裏,你應該得到所有你需要的。具有多個值
http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html
一條INSERT語句,它說,比多重插入語句快得多。
這是一次性關閉操作嗎?
如果是這樣,只需爲每個數據元素生成一條sql語句並在服務器上執行它們。 30,000真的不應該花很長時間,你會有最簡單的方式輸入你的數據。
所有記錄插入成功。但它需要接近1.5秒。我需要縮短這個時間。 – pltvs
1.5秒內插入30000條記錄在我的書中很不錯。只需顯示一個旋轉計時器並等待。 –
嘗試在交易中包裝批量插入。
START TRANSACTION
INSERT INTO `table_name` VALUES (data1), (data2), ..., (data1000);
COMMIT
這可能會提高性能,我不知道如果MySQL可以部分提交批量插入雖然(如果它不能那麼這可能不會真正幫助很多)
請記住,即使在1.5秒,對於每個大小爲1k的30,000條記錄,您提交的速度爲20MB/s,實際上根據您的硬件設置可能會受到驅動器限制。
然後建議您調查SSD或更改Raid設置或獲得更快的機械驅動器(有大量關於使用安裝在SSD上的SQL db的優缺點的在線文章)。
在事務正文中包含一個大容量的'insert'循環可以大大減少磁盤I/O的數量,並且可以加快InnoDB和廉價PATA磁盤對數據庫的操作速度。我很想知道這個「技巧」是否可靠和便攜。這是在MySQL 5.6和Linux 2.6.32上。 – davide
這種方法相當可靠且便於攜帶,因爲內部所有插入操作都沒有事務創建和提交導致顯着I/O開銷的單個事務。這種方法顯着提高了幾乎每個關係數據庫的性能,並且不使用事務的唯一區別是整個插入將回滾或提交,而不是允許某些插入提交而其他失敗。 – Seph
這幫了我很大的忙。我做了100塊(每個GET請求最大api記錄)INSERT INTO ...在DUPLICATE KEY UPDATE ...這將花費2.30小時爲123k記錄使用$ mysqli-> multi_query(),用交易包裹每個塊和所有123k記錄花了20分鐘。我去吃午飯很開心。 –
Thaks。但桌子很簡單。它沒有索引。並且有類型MyISAM – pltvs