首页 > 编程知识 正文

mysql导入xml文件太慢的简单介绍

时间:2023-12-24 12:05:23 阅读:320168 作者:DXDQ

本文目录一览:

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强很多(几乎肯定)

load file 是一种,换引擎也是一种,还有一种很方便的,直接copy表,然后paste过去

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。