插入10W数据的两个程序比较
程序1 添加10W数据
$count = 0;
for ($i = 1;$i <= 100000 ;$i++) {
$add_data = [
'id' => $i,
'username' => 'user'.$i,
'sex' => mt_rand(1,2),
'age' => mt_rand(10,60),
];
$res = Db::connect('db_test')->table('tf_user')->insert($add_data);
if ($res) {
$count ++ ;
Clog::setLog('成功添加'.$i."条","add_user");
}
}
$this->json->setAttr('data',"成功添加".$count."个数据。");
$this->json->Send();
10W条数据,用时近85分钟。上面的代码,需要的内存少一些。执行的时间比较久。
程序2 添加10W数据
$all_data = [];
Clog::setLog("开始生成","add_user");
$begin = 100001;
$end = 200000;
$count = 0;
$total_count = 0;
for ($i = $begin;$i <= $end ;$i++) {
$add_data = [
'id' => $i,
'username' => 'user'.$i,
'sex' => mt_rand(1,2),
'age' => mt_rand(10,60),
];
$all_data[] = $add_data;
if (count($all_data) == 10000) {
$count = Db::connect('db_test')->table('tf_user')->insertAll($all_data);
$total_count += $count;
$all_data = []; // 重置
}
}
Clog::setLog('完成添加'.$total_count."条","add_user");
$this->json->setAttr('data',"成功添加".$total_count."个数据。");
$this->json->Send();
}
用时不到6分钟。
insertAll 方法生成的sql。
INSERT INTO `tf_user` (`id` , `username` , `sex` , `age`) VALUES ( 100001,'user100001',2,47 ) , ( 100002,'user100002',2,26 ) , ( 100003,'user100003',1,10 ) , ( 100004,'user100004',2,10 ) , ( 100005,'user100005',2,50 )
两个程序用时差距如此之大,数据量小看不出来,数据量大就能看出来了。第二个程序明显用时快了很多,但是需要的内存会大一些。
修改php.ini之后,重启php-fpm才能生效。重新加载nginx是没有效果的。
service php-fpm restart
修改my.cnf
sudo vim /etc/my.cnf
重启
service mysql restart
插入10W数据的两个程序比较的更多相关文章
- SQLServer 批量插入数据的两种方法
SQLServer 批量插入数据的两种方法-发布:dxy 字体:[增加 减小] 类型:转载 在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Ins ...
- 数据库一次性插入10w条数据,怎么插入效率快
在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题 下面介绍SQL Server支持的两种批量 ...
- SQL Server 批量插入数据的两种方法
在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍 SQL Server支持的两种批 ...
- SQL Server 批量插入数据的两种方法(转)
此文原创自CSDN TJVictor专栏:http://blog.csdn.net/tjvictor/archive/2009/07/18/4360030.aspx 在SQL Server 中插入一条 ...
- 转:SQL Server 批量插入数据的两种方法
在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量 ...
- [微信小程序] 微信小程序下拉滚动选择器picker绑定数据的两种方式
小程序 picker 多列选择器 数据动态获取 需求是将各校区对应各班级的数据 以两列选择器的方式展示出来,并且可以在选择完成之后记录选结果参数. 校区数据 和 班级数据 分别是两个接口,以 校区 t ...
- mysql 插入/更新数据
mysql 插入/更新数据 INSERT 语句 1.一次性列出全部字段的值,例如: INSERT INTO student VALUES('Chenqi','M', 29); INSERT INTO ...
- 获得Oracle中刚插入的数据的ID(for produce)
在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而 且不会出现读错的情况,就更显得困难了,为了解 ...
- MySQL批量插入大量数据方法
在MySQL数据库中,如果要插入上百万级的记录,用普通的insert into来操作非常不现实,速度慢人力成本高,推荐使用Load Data或存储过程来导入数据,我总结了一些方法分享如下,主要基于My ...
随机推荐
- nginx如何利用自定义的conf文件启动?
1.进入nginx的安装目录; 2.nginx -s -c conf/my.conf (校验该文件是否有效) nginx -s -c conf/my.conf 命令会卡死,存疑 3.start ...
- JSP 通过Session和Cookie实现网站自动登录
点记住密码 login.jsp String host = request.getServerName(); Cookie cookie = new Cookie("SESSION_LOGI ...
- 问答项目---账号密码异步校验后进行PHP校验
在做登陆的时候,通过异步校验后还需要通过PHP来校验账号和密码的正确性. PHP校验账号密码: public function login(){ if(!IS_POST){echo "页面不 ...
- Python 中的map函数,filter函数,reduce函数
自学python,很多地方都需要恶补. 三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str. 1.map函数 map函数会根据提供的函数对指定序 ...
- goole进不去?
1.把hosts文件放到C:\Windows\System32\drivers\etc目录下就可以上了.hosts文件自己下载 2. 上vpn ,注册个账号,每个账号500M的FQ流量也可以
- CH1807 Necklace【Hash】【字符串】【最小表示法】
1807 Necklace 0x18「基本数据结构」练习 背景 有一天,袁☆同学绵了一条价值连城宝石项链,但是,一个严重的问题是,他竟然忘记了项链的主人是谁!在得知此事后,很多人向☆同学发来了很多邮件 ...
- WebSocket学习记录
参考资料: Java后端WebSocket的Tomcat实现 基于Java的WebSocket推送 java WebSocket的实现以及Spring WebSocket 利用spring-webso ...
- PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)
PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...
- pandas的drop函数
当你要删除某一行或者某一列时,用drop函数,它不改变原有的df中的数据,而是返回另一个dataframe来存放删除后的数据. 1.命令: df.drop() 删除行:df.drop('apps') ...
- Python自动发布Image service的实现
使用Python自动发布地图服务已经在上一篇博客中讲到,使用Python创建.sd服务定义文件,实现脚本自动发布ArcGIS服务,下面是利用Python自动发布Image service的实现. -- ...