我有一个程序可以从许多商家收集信息。
来自商家的每个请求,我的程序都会执行一个 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/