MySQL中怎么实现快速插入数据
创始人
2024-12-21 21:22:39
0次

  MySQL如何快速插入数据

  1.尽量减小导入文件大小

  首先给个建议,导出导入数据尽量使用MySQL自带的命令行工具,不要使用Navicat、workbench等图形化工具。特别是大数据量的时候,用MySQL自带的命令行工具导出和导入比用Navicat等图形化工具要快数倍,而且用Navicat等图形化工具做大数据量的操作时很容易卡死。下面简单介绍下怎么用MySQL自带的命令行工具做导入导出。

  #导出整个实例

  mysqldump-uroot-pxxxxxx--all-databases>all_database.sql

  #导出指定库

  mysqldump-uroot-pxxxxxx--databasestestdb>testdb.sql

  #导出指定表

  mysqldump-uroot-pxxxxxxtestdbtest_tb>test_tb.sql

  #导入指定SQL文件(指定导入testdb库中)

  mysql-uroot-pxxxxxxtestdb

  导入的SQL脚本内容大多是先建库建表,然后插入数据,其中耗时最长的应该是insert插入数据了。为了减小文件大小,推荐使用扩展插入方法,即多行一起批量insert,类似这样:insertintotable_namevalues(),(),(),...,();。使用扩展插入比一条条插入,文件大小要小很多,插入速度要快好几倍。使用mysqldump导出的文件默认是使用批量插入的方法,导出时可使用--skip-extended-insert参数改为逐条插入。

  可以看出,使用扩展插入的SQL脚本导入大概需要10分钟左右,而一条条插入的SQL脚本导入时间过长,大概1个小时仍然没有导完,一个2个多G的文本导入一个多小时仍未结束,等不及的笔者就手动取消了不过还是可以看出多条一起insert比一条条插入数据要节省数倍的时间。

  2.尝试修改参数加快导入速度

  在MySQL中,有一对大名鼎鼎的“双一”参数,即innodb_flush_log_at_trx_commit与sync_binlog。为了安全性这两个参数默认值为1,为了快速导入脚本,我们可以临时修改下这两个参数,下面简单介绍下这两个参数:

  innodb_flush_log_at_trx_commit默认值为1,可设置为0、1、2

  如果innodb_flush_log_at_trx_commit设置为0,logbuffer将每秒一次地写入logfile中,并且logfile的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把logbuffer的数据写入logfile,并且flush(刷到磁盘)中去.如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把logbuffer的数据写入logfile.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次flush(刷到磁盘)操作。

  sync_binlog默认值为1,可设置为[0,N)

  当sync_binlog=0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binarylog。当sync_binlog=N(N>0),MySQL在每写N次二进制日志binarylog时,会使用fdatasync()函数将它的写二进制日志binarylog同步到磁盘中去。

  MySQL如何快速插入数据

  这两个参数可以在线修改,若想快速导入,可以按照下面步骤来操作:

  #1.进入MySQL命令行临时修改这两个参数

  setglobalinnodb_flush_log_at_trx_commit=2;

  setglobalsync_binlog=2000;

  #2.执行SQL脚本导入

  mysql-uroot-pxxxxxxtestdb

  #3.导入完成再把参数改回来

  setglobalinnodb_flush_log_at_trx_commit=1;

  setglobalsync_binlog=1;

  还有另外一种场景是你的需求是新建从库,或者是不需要产生binlog,这时候导入SQL脚本时可以设置暂时不记录binlog,可以在脚本开头增加setsql_log_bin=0;然后再执行导入,这样速度会进一步加快。如果你的MySQL实例没有开启binlog则不需要再执行该语句了。

关于MySQL中怎么实现快速插入数据问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...