2012-08-10 235 views
5

我需要插入數百萬行到MySQL數據庫(InnoDB引擎)。當桌子有大尺寸時,我的時間有問題。幾乎所有的時間都花在插入查詢上。也許有人知道如何優化它?如何優化MySQL插入百萬行?

+0

什麼是查詢呢? – 2012-08-10 15:24:40

+0

你是什麼意思? – 2012-08-10 15:26:29

+0

插入數據時在桌面上執行的任何其他操作? – Kermit 2012-08-10 15:29:33

回答

14

要導入大批量數據的進入的InnoDB:

  1. 集MySQL配置

    • innodb_doublewrite = 0
    • innodb_buffer_pool_size = 50%+系統存儲器
    • innodb_log_file_size = 512M
    • log-bin = 0
    • innodb_support_xa = 0
    • 的innodb_flush_log_at_trx_commit = 0
  2. 交易開始後添加右:

    SET FOREIGN_KEY_CHECKS = 0;

    SET UNIQUE_CHECKS = 0;

    SET AUTOCOMMIT = 0;

  3. 權交易結束之前,設置:

    SET UNIQUE_CHECKS = 1;

    SET FOREIGN_KEY_CHECKS = 1;

+0

這些優化讓我從每10分鐘做10,000條記錄到500,000條記錄,令人印象深刻。 – input 2013-08-27 09:55:21

+0

同時設置'sync_binlog = 0'設置爲'1'(默認爲'0') – zogby 2014-03-13 16:44:50

+0

@zogby與'log_bin = 0' binlog完全禁用,所以'sync_binlog = 0'沒有區別。 – c2h5oh 2014-05-09 01:09:49

0

如果你對大量的INSERT報表說話,看看一些所謂的交易。我非常確定,大多數(如果不是全部的話)執行SQL支持事務的語言。他們會加快寫入數據庫的任何事情。額外的好處是,如果出現問題,您可以回滾更改。

+0

我已經在使用交易:) – 2012-08-10 15:33:23