【问题标题】:Insert Ignore efficiency over a period of time插入忽略一段时间的效率
【发布时间】:2012-01-29 12:09:46
【问题描述】:

情况是这样的

随着时间的推移,我将拥有一个包含大约 40-5 万条记录的 MySQL 数据库。这些记录是从一个文本文件中提取的(通过一个 PHP 脚本,在按下网页上的一个按钮后),该文件每天从另一个部门(不在我手中)更新(附加)2-3 次。我必须在数据库中插入这些新记录(当按下我网页上的按钮时)并忽略已经存在的记录。为此,我使用"Insert Ignore" 声明。

我的问题是,当记录增长(40-5 万)时,"Insert Ignore" 语句是否需要很长时间才能执行(我的浏览器超时时间为 5 秒,我无法超越)。一次更新的唯一记录永远不会超过 300 条,而且我的表只有 2 列(如果重要的话)。该系统现在运行良好,但我想为未来做好准备。我无法测试他的,所以如果有人能根据他/她的经验告诉我,我将不胜感激。

【问题讨论】:

  • 您预计增长到多大?
  • 正如我所提到的,我必须为 40-5 万条记录做好准备。 8万左右(上限)
  • 嗯,按照现代标准,它什么都不是。但是,您应该获得一台测试机器(例如在 Amazon EC2 上),在那里重新创建您的环境并使用 10 万条记录进行测试。
  • 当然..我会尝试的..但是环境会完全复制。例如,我没有固态驱动器,我在 MAMP 上运行它。

标签: php mysql database insert


【解决方案1】:

包含 50k 条记录的表不应该给您带来这样的性能问题。现在,如果你有 5000 万,我可能会改变态度。

正如 Moshe L 所指出的,有几种方法可以解决这个问题。这是一篇文章的链接,该文章在 900 万条记录的数据库中测量了performance of ON DUPLICATE KEY vs. INSERT IGNORE。据此,你走在正确的道路上。

【讨论】:

    【解决方案2】:

    我有一个很重的名称/值系统,有 INSERT IGNOREINSERT ... On DUPLICATE KEY UPDATE。 当表变大时,我正在“拆分”今天的信息(重更新)和存档。

    另外,我不知道您的系统设计是什么,但在我的系统(简单名称/计数器)中,我保存了一周的详细信息,并且存档被分组以得到小而更少的行。

    祝你好运!

    【讨论】:

    • 拆分和存档是个好主意。但在两列中,一列是主键。如果你拆分,存档你没有机会得到重复。
    • 我不知道你的系统设计是什么。如果你不能,你就不能。
    猜你喜欢
    • 1970-01-01
    • 2016-10-22
    • 2013-07-06
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多