批量向MySQL导入1000万条数据的优化

批量向MySQL导入1000万条数据的优化,第1张

1.用start transaction关闭mysql的自动提交,合理设置插入批量大小,不要一条数据提交一次。 2.修改表的存储引擎InnoDB为MyISAM。(因为InnoDB中存在redo log日志,每次更新表的结果先写入redo log中,等redo log满了之后再写入磁盘而这个过程是会停止其他所有的事务) 3.优化SQL(一条SQL语句插入多条数据) 4.尽量顺序插入(存储引擎底层采用的数据结构是B+tree索引,如果每次插入记录都在索引的最后面,索引的定位效率很高,并且对索引调整较小;如果插入的记录在索引中间,则需要维护B+tree并且索引定位效率会下降,数据量较大时会有频繁的磁盘 *** 作)

MySQL 限制的表大小为4GB。由于在MySQL 中使用了MyISAM 存储引擎,最大表尺寸增加到了65536TB(2567 – 1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由 *** 作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。InnoDB 存储引擎将InnoDB 表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。

在实际工作中,有时经常地时行mysql数据库的导入和导入 *** 作,但对于大型sql文件导入时,phpmyadmin是不行的,有太多限制,比如记录,内存等!

比较好的办法仍是用mysql的source命令:

一、在客户端下 *** 作:

1、进行入客户端

2、mysql>use

数据库名(如果没有,先建一个)

3、mysql>set

names

'utf8'

(一般看导入的是什么格式的文件)

4、mysql>source

d:\aaa.sql

即可正常导入,如果有错,可以看出错提示

二、PHP文件 *** 作:

建立a.php

里面有下面内容

mysql_connet('xxxx')

mysql_query("set

names

'utf8'")

mysql_query("source

d:\aaa.sql'")

原理同上,主要方便了无法使用命令行用户的 *** 作


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8689313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存