PHP+MySQL 插入数据性能测试

学习记录 留作参考
祝君好运

测试条件

  • PHP7.3.4、MySQL5.7.26、WIN11 。使用命令行模式执行PHP代码,PDO形式连接数据库。
  • 每次测试插入前均为空表,表内共13个字段:int*3、varchar*1、text*9,使用utf8编码。
  • 平均每条数据待存储的内容大小为 4KB 。

测试代码

github站

测试结果

使用InnoDB

  1. 循环执行 50次单条插入语句,不使用事务,测试10次,平均耗时 0.036135983467102
  2. 循环执行500次单条插入语句,不使用事务,测试10次,平均耗时 0.33866319656372
  3. 循环执行 50次单条插入语句, 使用事务,测试10次,平均耗时 0.010811376571655
  4. 循环执行500次单条插入语句, 使用事务,测试10次,平均耗时 0.069037747383118
  5. 循环执行 50次单条插入语句,不使用事务,使用prepare预处理sql,测试10次,平均耗时 0.039885687828064
  6. 循环执行500次单条插入语句,不使用事务,使用prepare预处理sql,测试10次,平均耗时 0.36127474308014
  7. 循环执行 50次单条插入语句, 使用事务,使用prepare预处理sql,测试10次,平均耗时 0.014089918136597
  8. 循环执行500次单条插入语句, 使用事务,使用prepare预处理sql,测试10次,平均耗时 0.088695383071899
  9. 50 条数据拼接成一条插入语句,不使用事务,测试10次,平均耗时 0.0077745199203491
  10. 500条数据拼接成一条插入语句,不使用事务,测试10次,平均耗时 0.04852921962738
  11. 50 条数据拼接成一条插入语句, 使用事务,测试10次,平均耗时 0.0079685926437378
  12. 500条数据拼接成一条插入语句, 使用事务,测试10次,平均耗时 0.049140906333923
  13. 50条数据拼接成一条插入语句并连续执行10遍,不使用事务,测试10次,平均耗时 0.050497055053711
  14. 50 条数据拼接成一条插入语句并连续执行10遍, 使用事务,测试10次,平均耗时 0.048738098144531

使用MyISAM

  1. 500条数据拼接成一条插入语句,使用事务,测试10次,平均耗时 0.026592636108398

测试总结

  1. 当使用单条插入语句时
    1. 一次插入50条,不开事务的耗时是开启事务的 3.3 倍。
    2. 一次插入500条,不开事务的耗时是开启事务的 4.9 倍。
  2. 当将待插入数据拼接成一条语句执行时
    1. 一次插入50条,不使用事务,多条耗时是单条的 4.64 倍。使用事务,多条耗时是单条的 1.35 倍。
    2. 一次插入500条,不使用事务,多条耗时是单条的 6.97 倍。使用事务,多条耗时是单条的 1.40 倍。
    3. 一次插入500条,与一次插入50条*10次,的性能差距很小,是否开启事务的影响也很小。
  3. 是否对单条语句开启事务对性能的影响微乎其微。事务的开启与提交会消耗一点性能而导致稍慢。单条语句开启事务也没有什么实际意义。
  4. 当一次插入多条数据时,如果数据量过大,可能会导致该语句超过MySQL可接受的数据包大小。
    1. 可通过拆分数据,将一次插入全部数据,改成分批多次插入数据。
    2. 具体MySQL可接受数据包字节数可通过该命令查看: show VARIABLES like '%max_allowed_packet%';
  5. 关于MySQL的prepare
    1. 在执行插入操作时没有得到预想的性能提升,可能是因为prepare更应该用在查询数据的场景(后续再追加测试吧)。
    2. 使用prepare后,可以不必再对单引号、双引号、反斜杠等特殊字符转义。若预先手动转义,将导致转义叠加,使记录的数据与原始数据不一致。
  6. 关于MySQL的存储引擎
    1. 单条语句插入500条数据,使用 InnoDB 的耗时是 MyISAM 的 1.8 倍。
    2. 若对 MyISAM 使用事务,回滚是无效的,也不会报错(应该可以认为是仅对支持事务的数据表进行回滚操作)。
posted @   azsd  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示