本文目录一览:
- mysql 如何提高批量导入的速度
- mysql CMD source导入超大文件速度慢
- 如何将xml格式文件导入mysql中
- 为什么我的mysql导入sql文件很慢,3000多条的insert语句都要5分钟,我朋友电脑却不超
- 怎么提高Mysql执行sql导入的速度
- 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
命令可以导入比较大的文件。
代码如下:
mysql> use dbtest;
mysql> set names utf8;
mysql> source 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导入的速度
- 如果mysql的data数据很少,内存足够大,可以把data放到内存盘中。
Linux如下设置内存盘:
默认使用内存一半。mount -t ramfs none /ram
如果内存不够大,系统有多个硬盘,则把mysql应用程序和data目录分开到不同硬盘上。 - mysql的表设置为MyISAM,比同等条件下的InnoDB能快20倍以上。
- 导入完成以后才创建数据库索引。
- 导入完成以后根据需要转换为其他engine,比如InnoDB。
- 多条数据插入一个表,可以使用多记录方式:
INSERT INTO tablename VALUES('xxx','xxx'), ('yyy','yyy'), ...;
- 如果多个mysql执行导入,可以使用
DELAYED
:INSERT DELAYED INTO tablename VALUES('sss','ssss');
- 大文件sql文件可以用
split
分成多份再导。 - 同等条件下,RedHat比Ubuntu强很多(几乎肯定)。
Navicat for MySQL导入数据库时特别慢,怎么样能提高速度?
LOAD DATA INFILE
是一种,换引擎也是一种,还有一种很方便的,直接复制表,然后粘贴过去。