【发布时间】:2016-12-10 22:26:59
【问题描述】:
我有以下架构的表:http://i.imgur.com/jn2nrFT.png
它的 MySQL,在 InnoDB 上运行,在基本的 Digital Ocean 主机(512 MB,1 CPU)上。我正在使用 PHP/Doctrine,在我的代码中,我做了类似的事情
for( $i = 0; $i < 5000; ++$i ) {
$row = findRowInTable();
if (! $row ) {
insertNewRow();
}
}
$em->flush();
它很慢,当表为空时需要 20 秒,当表有 5000 行时需要 50 秒。
如何优化它?我将添加最多 5K 行,但我需要在 120 秒内完成此过程,即使表的长度为 200K 行
【问题讨论】:
-
要表演,不要学说。
-
并获得更多内存。另一个cpu也会很好。另外,我们不知道您是否没有在同一个循环中打开/关闭数据库连接和/或在那里查询与数据库相关的内容。
-
@JayBlanchard 泰坦尼克号很久以前沉没了 ;-) 快艇的时间到了!有 2 个 454 和 8 个枪管,或者更好,blower! 在 2 个 426 HEMI 上。
-
我对 Doctrine 不熟悉,但是寻找一种方法来做
INSERT IGNORE,而不是先寻找行,并找到一种批量插入的方法。 -
如果你想要速度,不要使用PHP,让mysql处理它
标签: php mysql optimization doctrine innodb