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

插入分析

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

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

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

每种方法的性能如下.

Innodb引擎

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

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

php mysql百万级数据_PHP + MySQL百万级数据插入的优化_第1张图片

测试环境

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

php mysql百万级数据_PHP + MySQL百万级数据插入的优化_第2张图片

总共100W数据

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

摘要

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

报价:

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

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

php mysql百万级数据_PHP + MySQL百万级数据插入的优化_第3张图片

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

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

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

php mysql百万级数据_PHP + MySQL百万级数据插入的优化_第4张图片

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

第三种方法: 使用优化的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秒!代码如下:

php mysql百万级数据_PHP + MySQL百万级数据插入的优化_第5张图片

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

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

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

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

在这里计算几个选项

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

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

3或您自己的一些方法

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

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

你可能感兴趣的:(php,mysql百万级数据)