mysql怎么提高insert into的速度啊?

mysql怎么提高insert into的速度啊?,第1张

sql语句中,添加记录的语法为:insert into 表名 (col1,col2....coln)values(value1,value2.....valuen);

其中,如果你插入的每一列都是顺序插入,无一缺漏的话,(col1,col2...coln)可以省略。

也就是上式也可以简化为:insert into 表名 values(value1,value2.....valuen);

看了你写的sql代码,问题出在insert into 的整体语句出现在了不该出现的地方,只需做一点小改动即可解决,如下图:

解析:insert into语句需要在user表已经存在的情况下才可以使用。而你原来的语句中,将上图2中的语句插入到了create table user的语句中,致使create table user 语句未能成功执行,所以才会报错。

而将“INSERT INTO user(uid,tel) values('甲','3354986')”整条语句直接拿出来放在“ENGINE=InnoDB DEFAULT CHARSET=gbk”后面之后,整个sql就可以顺利执行了。

扩展资料:

当mysql大批量插入数据的时候就会变的非常慢, mysql提高insert into 插入速度的方法有三种:

1、第一种插入提速方法:

如果数据库中的数据已经很多(几百万条), 那么可以 加大mysql配置中的 bulk_insert_buffer_size,这个参数默认为8M

举例:bulk_insert_buffer_size=100M;

2、第二种mysql插入提速方法:

改写所有 insert into 语句为 insert delayed into

这个insert delayed不同之处在于:立即返回结果,后台进行处理插入。

3、第三个方法: 一次插入多条数据:

insert中插入多条数据,举例:

insert into table values('11','11'),('22','22'),('33','33')...

过对MySQL的测试,发现一些可以提高insert效率的方法,供大家参考参考。

1. 一条SQL语句插入多条数据。

常用的插入语句如:

MySQL

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0)

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1)

修改成:

MySQL

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1)

修改后的插入 *** 作能够提高程序的插入效率。这里第二种SQL执行效率高的主要原因有两个,一是减少SQL语句解析的 *** 作, 只需要解析一次就能进行数据的插入 *** 作,二是SQL语句较短,可以减少网络传输的IO。

这里提供一些测试对比数据,分别是进行单条数据的导入与转化成一条SQL语句进行导入,分别测试1百、1千、1万条数据记录。

2. 在事务中进行插入处理。

把插入修改成:

MySQL

START TRANSACTION

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('0', 'userid_0', 'content_0', 0)

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES ('1', 'userid_1', 'content_1', 1)

...

COMMIT

使用事务可以提高数据的插入效率,这是因为进行一个INSERT *** 作时,MySQL内部会建立一个事务,在事务内进行真正插入处理。通过使用事务可以减少创建事务的消耗,所有插入都在执行后才进行提交 *** 作。

这里也提供了测试对比,分别是不使用事务与使用事务在记录数为1百、1千、1万的情况。

性能测试:

这里提供了同时使用上面两种方法进行INSERT效率优化的测试。即多条数据合并为同一个SQL,并且在事务中进行插入。

从测试结果可以看到,insert的效率大概有50倍的提高,这个一个很客观的数字。

注意事项:

1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M。

2. 事务需要控制大小,事务太大可能会影响执行的效率。MySQL有innodb_log_buffer_size配置项,超过这个值会日志会使用磁盘数据,这时,效率会有所下降。所以比较好的做法是,在事务大小达到配置项数据级前进行事务提交。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存