php mysql百万级数据_PHP + MySQL百万级数据插入的优化

文章对比分析了在PHP中插入MySQL百万级数据的三种方法:单条插入、批量插入和使用Load Data。实验结果显示,Load Data方法在速度上显著优于其他方法,尽管操作相对复杂。此外,讨论了内存限制和SQL语句溢出的问题,并提出了配置选项、队列处理等解决方案。
摘要由CSDN通过智能技术生成

221347122.png

插入分析

在MySQL中插入记录所需的时间由以下因素组成,其中的数字代表大约比例:

如果每次插入一条语句都执行一条SQL语句,则需要执行除连接和关闭N次以外的所有步骤,这非常耗时. 有几种优化方法:

在每个insert语句中写入多行,批量插入以将所有查询语句写入事务中,并使用Load Data导入数据

每种方法的性能如下.

Innodb引擎

InnoDB为MySQL提供具有事务处理(提交),回滚(回滚)和崩溃恢复功能(崩溃恢复功能)的事务安全(符合ACID)类型表. InnoDB提供行锁定(在行级别上锁定)和外键约束(FOREIGN KEY约束).

InnoDB的设计目标是处理大容量系统,其CPU利用率是其他基于磁盘的关系引擎所无法比拟的. 从技术上讲,InnoDB是置于MySQL后台的完整系统. InnoDB在主内存中建立专用的缓冲池,用于高速缓冲数据和索引.

a251e40251876541e6db51e4267a8578.png

测试环境

Macbook Air 12mid apache2.2.26 php5.5.10 mysql5.6.16

总共100W数据

插入后的大小为38.6MB(无索引)php采集新闻数据插入,46.8(有索引)

MyIASM引擎

MyISAM是MySQL的默认存储引擎. 设计简单,支持全文搜索.

测试环境

Macbook Air 12mid apache2.2.26 php5.5.10 mysql5.6.16

7061d79204c7d54227529c04978a5238.png

总共100W数据

插入后,大小为19.1MB(无索引),38.6(有索引)

摘要

我测试的数据量不是很大,但是您可能可以理解这些插入方法对速度的影响. 最快的方法一定是Load Data方法. 这种方法比较麻烦,因为它涉及写入文件,但是可以同时考虑内存和速度.

报价:

第二php采集新闻数据插入,PHP + MySQL百万次数据插入

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

5f833d4888a885418152430350d89cd5.png

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5

最终显示为: 23:25:05 01:32:05,这意味着花费了2个多小时!这只是几分钟. .

第二种方法: 使用事务提交并批量插入(每10W提交一次)

最后显示的消耗时间为: 22:56:13 23:04:00,总共8分13秒,代码如下:

279bc805487217209f38fa882befbdd2.png

时间缩短了一点,但仍然有点长.

第三种方法: 使用优化的SQL语句: 拼接SQL语句,使用insert into table()值()(),(),(),(),然后将其插入一次(如果字符串太长), <

您需要配置MYSQL并在mysql命令行上运行它: set global max_allowed_pa​​cket = 2 * 1024 * 1024 * 10;消耗时间是: 11:24:06 11:24:11;

插入200W测试数据所需的时间不到6秒!代码如下:

d64e6577737d05979d35bd123f6bbc0e.png

也许有人会说数据不大. 导出的sql文件也小200M,耗时5秒. 表单需要200万条数据.

这将告诉您TP框架的addall方法

1748

速度也很快,但不如原生.

让我们谈谈可能遇到的一些问题,例如PHP内存限制和mysql SQL语句在实验过程中溢出甚至下降

在这里计算几个选项

1. 您可以配置php.ini my.ini等.

2. 每个人都可以使用队列进行批处理

3或您自己的一些方法

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-238991-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值