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

发布时间:2022-11-15

本文目录一览:

  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 (...), (...)
    deleteupdate,驱动所做的事就是把多条sql语句累积起来再一次性发出去;而对于 insert,驱动则会把多条sql语句重写成一条风格很酷的sql语句,然后再发出去。官方文档说,这种 insert 写法可以提高性能("This is considerably faster (many times faster in some cases) than using separate single-row INSERT statements")

一个注意事项

需要注意的是,即使 rewriteBatchedStatements=truebatchDelete()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导入的速度

  1. 如果mysql的data数据很少,内存足够大,可以把data放到内存盘中。
    Linux如下设置内存盘:
    mount -t ramfs none /ram
    
    默认使用内存一半。
    如果内存不够大,系统有多个硬盘,则把mysql应用程序和data目录分开到不同硬盘上。
  2. mysql的表设置为MyISAM,比同等条件下的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 DATA INFILE 是一种,换引擎也是一种,还有一种很方便的,直接复制表,然后粘贴过去。