本文目录一览:
- 1、mysql 如何提高批量导入的速度
- 2、mysql CMD source导入超大文件速度慢
- 3、如何将xml格式文件导入mysql中
- 4、为什么我的mysql导入sql文件很慢,3000多条的insert语句都要5分钟,我朋友电脑却不超
- 5、怎么提高Mysql执行sql导入的速度
- 6、Navicat for MySQL导入数据库时特别慢,怎么样能提高速度?
mysql 如何提高批量导入的速度
这个是需要做一些设置的。主要设置 rewriteBatchedStatements参数。原理如下:
MySQL Jdbc驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,直接造成较低的性能。
只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL (jdbc:mysql://ip:port/db?rewriteBatchedStatements=true)。不过,驱动具体是怎么样批量执行的? 你是不是需要看一下内幕,才敢放心地使用这个选项? 下文会给出答案。
另外,有人说rewriteBatchedStatements只对INSERT有效,有人说它对UPDATE/DELETE也有效。为此我做了一些实验(详见下文),结论是: 这个选项对INSERT/UPDATE/DELETE都有效,只不过对INSERT它为会预先重排一下SQL语句。
注:本文使用的mysql驱动版本是5.1.12
实验记录:未打开rewriteBatchedStatements时
未打开rewriteBatchedStatements时,根据wireshark嗅探出的mysql报文可以看出,
batchDelete(10条记录) = 发送10次delete 请求
batchUpdate(10条记录) = 发送10次update 请求
batchInsert(10条记录) = 发送10次insert 请求
也就是说,batchXXX()的确不起作用
实验记录:打开了rewriteBatchedStatements后
打开rewriteBatchedStatements后,根据wireshark嗅探出的mysql报文可以看出
batchDelete(10条记录) = 发送一次请求,内容为”delete from t where id = 1; delete from t where id = 2; delete from t where id = 3; ….”
batchUpdate(10条记录) = 发送一次请求,内容为”update t set … where id = 1; update t set … where id = 2; update t set … where id = 3 …”
batchInsert(10条记录) = 发送一次请求,内容为”insert into t (…) values (…) , (…), (…)”
对delete和update,驱动所做的事就是把多条sql语句累积起来再一次性发出去;而对于insert,驱动则会把多条sql语句重写成一条风格很酷的sql语句,然后再发出去。 官方文档说,这种insert写法可以提高性能(”This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements”)
一个注意事项
需要注意的是,即使rewriteBatchedStatements=true, batchDelete()和batchUpdate()也不一定会走批量: 当batchSize = 3时,驱动会宁愿一条一条地执行SQL。所以,如果你想验证rewriteBatchedStatements在你的系统里是否已经生效,记得要使用较大的batch.
更多细节看这个帖子:
blog.yemou.net/article/query/info/tytfjhfascvhzxcyt397
mysql CMD source导入超大文件速度慢
下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件。
导入1G的数据,但是在怎么都导入不了,用命令行就可以轻松搞定了。用mysql source命令可以导入比较大的文件。
代码如下 复制代码
mysqluse dbtest;
mysqlset names utf8;
mysqlsource D:/www/sql/back.sql;
通过source命令导入多个文件,可以新建一个sou.sql文件,里面存放下面的命令
例如:
代码如下 复制代码
source d:/a1.sql;
source d:/a2.sql;
如何将xml格式文件导入mysql中
举例说明如下
xml文件名为: text.xml
xml数据文件的结构如下:
node1
node2 name="abc"123/node2
/node1
sql命令如下:
SET @xml = LOAD_FILE('text.xml'); -- 要指定完整的文件位置
SELECT ExtractValue(@xml, '/node1/node2/@name') as name,ExtractValue(@xml, '/node1/node2') as data;
返回数据结果就是:
name | data
abc | 123
为什么我的mysql导入sql文件很慢,3000多条的insert语句都要5分钟,我朋友电脑却不超
硬盘读写速度会影响输入库的写入速度的,另外看看你的mysql是不是加了好多索引,或者是不是远端数据库。。。硬盘,cpu,内存,网络和mysql配置都会对执行速度产生影响的
怎么提高Mysql执行sql导入的速度
1、如果mysql的data数据很少,内存足够大,可以把data防止到内存盘中。
linux如下设置内存盘:
mount -t ramfs none /ram
默认使用内存一半
如果内存不够大,系统有多个硬盘,则把mysql应用程序和data目录分开到不同硬盘上。
2、mysql的表设置为myiasm,比同等条件下的innodb能快20倍以上
3、导入完成以后才创建数据库索引
4、导入完成以后根据需要转换为其他engine,比如innodb
5、多条数据插入一个表,可以使用多记录方式:
insert into tablename values(’xxx’,'xxx’),(’yyy’,'yyy’)…;
6、如果多个mysql执行导入,可以使用delayed
insert delayed into tablename values(’sss’,’ssss’);
7、大文件sql文件可以用split分成多份再导
8、同等条件下,redhat比ubuntu强很多(几乎肯定)
Navicat for MySQL导入数据库时特别慢,怎么样能提高速度?
load file 是一种,换引擎也是一种,还有一种很方便的,直接copy表,然后paste过去