php - 如何提高 MySQL INSERT 性能?

标签 php mysql performance

我有一个程序可以从许多商家收集信息。

来自商家的每个请求,我的程序都会执行一个 InSERT 查询:

INSERT INTO `good` (id,code,merchant,netcost,ip) values('','GC8958','merchantname','581000','192.168.34.30');

商家一次请求很多(超过500+请求),所以MYSQL做了500+插入查询。

这是一个问题吗?我该如何用 MYSQL 解决它?

最佳答案

这应该不是问题,除非您的硬件有限(在这种情况下,答案是“更快的磁盘、更多的 RAM、更快的 CPU”一旦您验证了这三者中的哪一个平均是瓶颈)。您可以使用 INSERT DELAYED “覆盖”峰语法,如果您使用 MyISAM 表(可能不值得;该语法已被弃用)。

如果您批量执行此操作(即不是不同的客户端每个插入一行),则多个 INSERT s 甚至 LOAD DATA INFILE将是一个巨大的帮助。在紧要关头,您可以将它们保存在磁盘或 session 上(相当于相同的东西)上(或者可能在一个小 MEMORY 表中 - 但我会在诉诸该表之前运行一些测试)并运行真实INSERT闲暇时。

我会把进一步的优化留到以后; “过早的优化是万恶之源”。无论如何,您可能对 some 感兴趣Google results (最后涉及一些深奥的问题,例如“问题是:启用 InnoDB 双写缓冲区更好还是使用 ext4 事务日志更好”)。

关于php - 如何提高 MySQL INSERT 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26602522/

相关文章:

C++ 将 uint8_t 转换为 unsigned long

c# - 列表查询比 IQueryable 快 20 倍?

javascript - AJAX 页面重新加载

php - 此 Mysql SQL Select 查询执行需要 33 分钟

适用于多个用户的 MySQL 数据库结构,每个用户有 100 到 1000 条唯一行

php - 在 SQLite 中选择和项目的当前、上一个和下一个值的最有效方法

php - 如何将filter_input与数组一起使用?

php - apache 中的 php_value auto_prepend_file 如何与 php 一起工作,它是否始终保留在内存中?

php - SQL/PHP - 优化 while 循环内的查询

python - "Can' t 初始化字符集utf8mb4"with Windows mysql-python