StackOverflow 之前回答了很多问题,但我正在寻找一个更具体的问题,但我找不到确切的答案。
我目前正在使用带有 Doctrine 1.2.2 的 PHP/MySQL,期待改进我的脚本。它实际上每 5 分钟向数据库中添加大约 300 个条目。其实这个脚本使用的是mysql multi-insert,不是doctrine。
我想知道什么更好、更快并且使用更少的资源。 提前致谢。
首次编辑和测试
好吧伙计们,首先是第一件事:)
我首先尝试只使用 MySQL 语句。 Fabrizio 建议使用 INSERT DELAYED,但由于我使用的是 innoDB,因此不可用。
我发现一些测试使用 MySQL 语句运行 3 次我必须运行的每个作业。对于第一份工作,我平均需要 53 秒的运行时间,使用 6.25 Mb(记住我在这里加载了 138 页)
第二份工作平均用时 3 分 30 秒,使用 4.25 Mb(记住我在这里加载了 510 页)
对于第三份工作,我平均用了 3 分 9 秒,使用了 4.75 Mb(记住我在这里加载了 410 页)
我能够转换为 Doctrine 的第一个 Job,大约同时运行(53 秒),但使用 9.75 Mb。在第二和第三份工作中我遇到了问题,因为 Doctrine 不支持 ON DUPLICATE KEY 并且使用 replace() 使我丢失了之前添加的数据,由于外键并且 replace() 实际上删除了旧值并添加了一个新值.
从这次测试来看,我还是会使用MySQL查询多插入。有什么模式想法可以测试吗?
谢谢大家:)
最佳答案
你为什么不自己检查一下?
尝试在 SQL 执行前后使用简单的 time() 比较来对这两种解决方案进行基准测试。 没有更好的方法可以知道哪个更好,这完全取决于您的查询、数据库结构和连接数(至少是这些因素,但可能不是全部)。
对于内存使用情况,您可以尝试使用memory_get_usage。
关于多插入的 PHP/MySQL 和 Doctrine 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536901/