Mysql插入很慢,找到了稍微快点的方法

MYSQL批量插入数据库实现语句性能分析

假定我们的表结构如下

代码如下 

CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR( 50 ) NOT NULL,
value VARCHAR( 50 ) NOT NULL,
other_value VARCHAR( 50 ) NOT NULL
)

  通常情况下单条插入的sql语句我们会这么写:

代码如下 

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1');

  mysql允许我们在一条sql语句中批量插入数据,如下sql语句:

代码如下 

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

  如果我们插入列的顺序和表中列的顺序一致的话,还可以省去列名的定义,如下sql

代码如下 

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');

  上面看上去没什么问题,下面我来使用sql语句优化的小技巧,下面会分别进行测试,目标是插入一个空的数据表200W条数据

  第一种方法:使用insert into 插入,代码如下:

代码如下 


$params = array('value'=>'50');
set_time_limit(0);
echo date("H:i:s");
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date("H:i:s");

  最后显示为:23:25:05 01:32:05 也就是花了2个小时多!

  第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 23:04:00 ,一共8分13秒 ,代码如下:

代码如下 

echo date("H:i:s");

$connect_mysql->query('BEGIN');
$params = array('value'=>'50');
for($i=0;$i<2000000;$i++){ 
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query('COMMIT');
$connect_mysql->query('BEGIN');
}
}
$connect_mysql->query('COMMIT');
echo date("H:i:s");

  第三种方法:使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values (),(),(),()然后再一次性插入,如果字符串太长,

  则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet = 2*1024*1024*10;消耗时间为:11:24:06 11:25:06;

  插入200W条测试数据仅仅用了1分钟!代码如下:

代码如下 

$sql= "insert into twenty_million (value) values";
for($i=0;$i<2000000;$i++){
$sql.="('50'),";
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);

  最后总结下,在插入大批量数据时,第一种方法无疑是最差劲的,而第二种方法在实际应用中就比较广泛,第三种方法在插入测试数据或者其他低要求时比较合适,速度确实快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux - 时间相关命令 - ntpdate, date, hwclock

1. 概述 最近也不知道写啥了, 把之前的老文档整理一下, 凑个数什么的配置时间这种工作, 偶尔还是要用一下主要描述 3 个命令的简单适用 ntpdatehwlock2. ntpdate 1. 概述 用于同步时钟的命令2. 机制 通常是有一个服务器对外提供时间客户端可以与时间服务器同步ntp 是他们之间交…

RUNOOB python练习题1

用来练手的python 练习题&#xff0c;原链接 : python练习实例1 题干 : 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; import numpy as np cen np.array([1,2,3,4]) tens np.array([1,2,3,4])…

mysql explain用法和结果的含义

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法&#xff0c;在select语句前加上explain就可以了&#xff1a; 如&#xff1a; explain select surname,first_name form a,b where a.idb.id EXPLAIN列…

日志模块logging用法

一、常用日志记录场景及最佳解决方案&#xff1a; 日志记录方式 最佳记录日志方案 普通情况下&#xff0c;在控制台显示输出 print() 报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logging.debug()) 发出有关特定事件的警告 warnings.warn()或者loggin…

MySQL 亿级数据需求的优化思路(一),交易流水记录的查询

对MySQL的性能和亿级数据的处理方法思考&#xff0c;以及分库分表到底该如何做&#xff0c;在什么场景比较合适&#xff1f; 比如银行交易流水记录的查询 限盐少许&#xff0c;上实际实验过程&#xff0c;以下是在实验的过程中做一些操作&#xff0c;以及踩过的一些坑&#…

RUNOOB python练习题2

用来练手的python 练习题&#xff0c;原链接 : python练习实例2 题干 : 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时&#xff0c;奖金可提10%&#xff1b;利润高于10万元&#xff0c;低于20万元时&#xff0c;低于10万元的部分按10%提成&#xff0c;高于10万元的…

dubbo负载均衡策略和集群容错策略

dubbo负载均衡策略 random loadbalance 默认情况下&#xff0c;dubbo是random load balance随机调用实现负载均衡&#xff0c;可以对provider不同实例设置不同的权重&#xff0c;会按照权重来负载均衡&#xff0c;权重越大分配流量越高&#xff0c;一般就用这个默认的就可以了。…

MySQL 亿级数据需求的优化思路(二),100亿数据,1万字段属性的秒级检索

最近在研究亿级数据的时候&#xff0c;无意中看到了一个关于写58同城的文章 https://blog.csdn.net/admin1973/article/details/55251499?fromtimeline 其实上面讲的versionext的方式以及压缩json的思路&#xff0c;对于我来讲都可以看得懂&#xff0c;想得通&#xff0c;其…

RUNOOB python练习题3

用来练手的python 练习题&#xff0c;原链接 : python练习实例3 拿到题目就写了如下代码&#xff0c;思路是因为使用**0.5进行开平方操作时&#xff0c;python会将数据类型自动转换为float单精度浮点型。这里利用提取其整数部分&#xff0c;来判断这个数是否是完全平方数。 z…

使用git将项目上传到github(最简单方法)

使用git将项目上传到github&#xff08;最简单方法&#xff09; 首先你需要一个github账号&#xff0c;所有还没有的话先去注册吧&#xff01; https://github.com/ 我们使用git需要先安装git工具&#xff0c;这里给出下载地址&#xff0c;下载后一路直接安装即可&#xff1…

数据库 概念详解

数据库 概念详解 一、MySQL MySQL 事务 MySQL 锁 MySQL 二、Redis 三、MongoDB 四、Memcached 转载于:https://www.cnblogs.com/guozepingboke/p/10743648.html

RUNOOB python练习题4

用来练手的python习题其四&#xff0c; 原题链接: python练习实例4 题干: 输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff1f; 这个题目比较简单&#xff0c;只需要注意闰年和非闰年的区别就可以了。我这里使用numpy矩阵存储每个月的天数&#xff0c;之后用…

GitHub入门:如何上传与下载工程?

由于经常要在家写代码&#xff0c;所以需要有个能够方便访问代码管理工具。最近尝试了一下GitHub。经过了一翻纠结之后&#xff0c;基本上掌握了他的使用方式。 要使用GitHub需要首先在其网站上进行注册。其官方网站是https://github.com/。注册的流程在这里就不多少了&#x…

如何解决PIP命令不可用

今天想用PIP装一个python包&#xff0c;发现PIP报错&#xff0c;不是内部或外部命令。。。 遇事百度&#xff0c;有两种说法&#xff0c;一&#xff0c;没安装包&#xff0c;不管那么多命令执行了再说 在命令行输入&#xff1a;python -m ensurepip 将pip.exe文件下载下来 再pi…

RUNOOB python练习题5

用来练手的python 练习题其五&#xff0c;原链接 : python练习实例5 题干 : 输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 又是非常简单的排序算法&#xff0c;只要使用numpy矩阵的排序方法或者使用python list的排序算法就可以轻松解决。 源代码如下 : import …

初步使用github,并上传下载文件

使用GitHub需要先注册GitHub的账号,登陆进去 然后开始创建项目 start a project 创建完成,开始生成公私钥,可以不必每次都要输密码 ssh-keygen -t rsa -C "mghxy123163.com" //填写email地址&#xff0c;然后一直“回车”ok 然后把公钥导入GitHub中的key里面去,也…

NOIP2000提高组复赛C 单词接龙

题目链接&#xff1a;https://ac.nowcoder.com/acm/contest/248/C 题目大意&#xff1a; 略 分析&#xff1a; 注意点&#xff1a;1.前缀和后缀的公共部分应该选最短的。2.如果两个字符串前缀和后缀的公共部分恰好是其中一个字符串&#xff0c;那么这两个字符串不能合并。 代码…

右键Git Bash Here不见了怎么办,手把手教你还原!

第一步&#xff0c;window R&#xff0c;输入regedit回车进入注册表 依次进入HKEY_CLASSES_ROOT —-》 Directory —-》Background —-》 shell 右键点击shell&#xff0c;选择新建&#xff0c;然后选择项&#xff0c;命名为 Git Bash Here&#xff0c;成功后进入桌面右键发现…

RUNOOB python练习题6 斐波那契数列

用来练手的python 练习题其六&#xff0c;原链接 : python练习实例6 题干 : 斐波那契数列 斐波那契数列可以说是很好的递归理解工具了&#xff0c;这里就用递归实现一下斐波那契数列。 源代码如下: # 返回fibonacci数列中某一项的数值 def Fibonacci(n):if n 1:return 1eli…

linux 单用户密码修改

1.启动系统&#xff0c;并在GRUB2启动屏显时&#xff0c;按下e键进入编辑模式。 2.在linux16/inux/linuxef所在参数行ro更改为init/sysroot/bin/sh 3.按Crlx启动到shell. 4.挂载文件系统为可写模式: mount -o remount &#xff0c;rw /sysroot 5换根chroot /sysroot 6.运行pass…