2011-12-28 69 views
1

这里的情况在一段时间内插入忽略效率

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

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

+0

你期望增长多大? – 2011-12-28 21:51:34

+0

正如我所提到的,我必须准备好40-50万条记录。大约8万(上限) – Ank 2011-12-28 21:52:35

+0

那么,按照现代标准来说,它什么都不是。但是,您应该获得一台测试机器(例如,在Amazon EC2上),在那里重新创建您的环境并使用10万条记录进行测试。 – 2011-12-28 21:56:10

回答

1

我有一个重名称/值系统INSERT IGNOREINSERT ... On DUPLICATE KEY UPDATE。 当表变大时,我正在“分裂”今天的信息(更新繁重)和归档。另外,我不知道什么是您的系统设计,但在我的系统(简单名称/计数器)中,我保存了一周的详细信息,并且归档被分组以获得较小且较少的行。

祝你好运!

+0

拆分和归档是一个好主意。但是在两列中,一个是主键。如果你分裂,档案你没有机会得到重复。 – Ank 2011-12-28 21:56:20

+0

我不知道你的系统设计是什么。如果你不能,你不能。 – 2011-12-28 21:57:56

2

一个有50k记录的表不应该给你带来性能问题。现在,如果你有五千万,我可能会改变我的曲调。

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

+0

intersting文章。 – 2011-12-29 11:56:55