MYSQL批量插入数据最佳实践(MYISAM,InnoDB)

本文深入探讨了使用MySQL批量插入数据时的高效策略,特别关注了InnoDB引擎的优势与优化技巧,包括导入数据的最佳实践、批量插入速度的提升方法,以及InnoDB与MyISAM引擎之间的性能对比。

在使用MYSQL批量插入数据时我们一般可选的方式有:


   * 长SQL  insert into table(xx,xx) values(xx,xx),(xx,xx)

   * 或者执行多个单条 INSERT INTO table(xx,xx) VALUES (xx,xx);语句

   * 使用 LOAD DATA INFILE(导入)是SELECT...INTO OUTFILE(导出)

   * 使用 insert into ...select... 等


   但在使用这些方式之前,你可能得考虑一下执行速度问题。因为在MYSQL中的MyISAM与InnoDB引擎在读写操作执行效率有所不同。

   至于MyISAM与InnoDB的区别请看:

Advantages of InnoDB

InnoDB should be used where data integrity comes a priority because it inherently takes care of them by the help of relationship constraints and transactions.

Faster in write-intensive (inserts, updates) tables because it utilizes row-level locking and only hold up changes to the same row that’s being inserted or updated.

Disadvantages of InnoDB

Because InnoDB has to take care of the different relationships between tables, database administrator and scheme creators have to take more time in designing the data models which are more complex than those of MyISAM.

Consumes more system resources such as RAM. As a matter of fact, it is recommended by many that InnoDB engine be turned off if there’s no substantial need for it after installation of MySQL.

No full-text indexing .

 

Advantages of MyISAM

Simpler to design and create , thus better for beginners. No worries about the foreign relationships between tables.

Faster than InnoDB on the whole as a result of the simpler structure thus much less costs of server resources.

Full-text indexing .

Especially good for read-intensive (select) tables .

Disadvantages of MyISAM

No data integrity (e.g. relationship constraints) check, which then comes a responsibility and overhead of the database administrators and application developers.

Doesn’t support transactions which is essential in critical data applications such as that of banking.

Slower than InnoDB for tables that are frequently being inserted to or updated, because the entire table is locked for any insert or update.

完整原文: http://www.kavoir.com/2009/09/mysql-engines-innodb-vs-myisam-a-comparison-of-pros-and-cons.html

 

 在使用InnoDB引擎批量插入数据时有几点是要说明的:

  InnoDB批量插入最佳方式:

    * When importing data into InnoDB, make sure that MySQL does not have autocommit mode enabled because that

      requires a log flush to disk for every insert. To disable autocommit during your import operation, surround it with

      SET autocommit and COMMIT statements:

      SET autocommit=0;
      ... SQL import statements ...
      COMMIT;

      If you use the mysqldump option --opt, you get dump files that are fast to import into an InnoDB table,
      even without wrapping them with the SET autocommit and COMMIT statements.


   * If you have UNIQUE constraints on secondary keys, you can speed up table imports by temporarily turning off 
     the uniqueness checks during the import session:

      SET unique_checks=0;
      ... SQL import statements ...
      SET unique_checks=1;

      For big tables, this saves a lot of disk I/O because InnoDB can use its insert buffer to write secondary index 
      records in a batch. Be certain that the data contains no duplicate keys.


   * If you have FOREIGN KEY constraints in your tables, you can speed up table imports by turning the foreign key checks 
     off for the duration of the import session:

      SET foreign_key_checks=0;
      ... SQL import statements ...
      SET foreign_key_checks=1;

      For big tables, this can save a lot of disk I/O.

完整的InnoDB性能设置请看:http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html

 

另外:如何优化INSERT语句速度的因素请看: http://dev.mysql.com/doc/refman/5.1/zh/optimization.html#insert-speed

 

‍以上方式我这里就不给出具体实例了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值