zoukankan      html  css  js  c++  java
  • 提高批量插入数据的方法

    1.insert into demo(`a`,`b`,`c`)values('111','222','333'),('444','555','6666'),('777','888','9999'),....;

    的效率优于insert into demo(`a`,`b`,`c`)values('111','222','333');insert into demo(`a`,`b`,`c`)values('444','555','666');...

    补充:2016-02-26

    a.对于插入,优先使用:insert into table_name(column-1,column-2,column-3...)values('a','b','c',..),('aa','bb','cc',..),('aaa','bbb','ccc',..);

    b.开启事物,然后执行插入操作,会大大提高插入数据的效率。如:

    START TRANSACTION;   ### begin;
    insert into ....
    commit;
    当然,mysql中存储引擎innodb支持事物,myisam并不支持,,如果要使用事物。
    engine=innodb;
    alter table table_name engine=innodb;
    .....
    都可以。

    C.如果a与C结合起来使用,效果会更好。

    拓展:

    注意事项:

    aa. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M。

    在my.ini中

    [mysqldump]
    quick
    max_allowed_packet=16M

    bb. 事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会日志会使用磁盘数据,这时,效率会有所下降。所以比较好的做法是,在事务大小达到配置项数据级前进行事务提交。

     [mysqld]

    innodb_log_buffer_size=2M

    ..................

    2.如果你从不同客户插入很多行,能通过使用INSERT DELAYED语句得到更高的速度.语法:

    LOW_PRIORITY刚好相反,在所有其他用户对表的读写完后才进行插入。语法:

    对应的还有:

    3.如果进行批量插入,可以增加bulk_insert_buffer_size变量值的方法来提高速度,但是,这只能对myisam表使用。

    对数据库的配置:bulk_insert_buffer_size = n

    [mysqld]

    #新添加
    bulk_insert_buffer_size = 10000

    4.当从一个文本文件装载一个表时,使用LOAD DATA INFILE。这通常比使用很多INSERT语句快20倍。对于这种方法,我有相关随笔的介绍。

    5. 根据应用情况使用replace语句代替insert。

     6.根据应用情况使用ignore关键字忽略重复记录。

  • 相关阅读:
    使用::befor和::after伪元素在网站中添加图标
    使用LESS对CSS进行预处理
    window.innerWidth和document.body.clientWidth的区别
    javascript原型链继承
    javascript中的类型检测
    ASP.NET网站报Service Unavailable错误的解决办法
    在ASP.NET MVC中使用UEditor无法提交的解决办法
    EasyUI DataGrid设置列宽为百分比导致表头和内容错位的解决方法
    使用JS读取本地文本文件(兼容各种浏览器)
    美化上传文件按钮
  • 原文地址:https://www.cnblogs.com/wuheng1991/p/5169153.html
Copyright © 2011-2022 走看看