我有一个每小时的cron,它将大约25,000个条目插入到一个大约700万行的表中。我的主键是由5个不同字段组成的。我做了这个,这样我就不必在插入之前在表格中搜索重复项,假设在插入时骰子会掉到地板上。由于我在阅读这些25k条目(从URL下载多个json文件并构建插入查询)时看到的PHP内存问题,我将条目分成2k块并通过INSERT INTO blah (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
立即插入它们。最后我应该提一下我在DreamHost上,所以我怀疑我的服务器/数据库设置是那么棒。哦,db是MyIsam(默认)。
每个2k块插入大约需要20-30秒(导致总脚本时间约为10分钟,包括下载6k json文件需要2分钟),当发生这种情况时,用户从该表中选择似乎被阻止/延迟使网站对用户没有反应。我的猜测是减速来自插入试图将5场PK编入700万的表。
我原本以为启用并发插入/选择会帮助无响应的站点,但据我所知,我的表已经是MyIsam并且我启用了并发插入。
我读到LOAD DATA INFILE
要快得多,所以我想把所有的值插入到一个空的临时表中,这个临时表大部分都是无冲突的(除了当前小时的dupes),导出那些w {{1}然后使用SELECT * INTO OUTFILE
,但我不知道插入和写入的开销是否否定了速度优势。另外我读过的指南通过在插入之前禁用我的索引来讨论进一步优化,但我认为这会破坏我在插入时避免重复的方法......
可能很明显,我在这里有点无能为力,我知道这足以让自己对下一步做什么感到困惑。关于如何加速插入或任何选择仍然响应这些插入的任何建议将非常感谢。