INSERT IGNORE或INSERT WHERE NOT IN

时间:2011-08-28 17:04:46

标签: php mysql bulkinsert large-data

我有一个900万行表,由于其庞大的规模,我很难处理所有这些数据。

我想要做的是在表中添加导入CSV而不覆盖数据。

在我做这样的事情之前;如果没有INSERT(从tblName选择电子邮件,其中source =“number”和email!=“email”)INTO(电子邮件...)VALUES(“email”...)

但我担心我会再次崩溃服务器。我希望能够将10,000个行插入表中,但前提是它不在表中,而不是source =“number”。

否则我会在电子邮件栏中使用unique。

简而言之,我希望尽快插入,而不是通过检查两件事来向表中引入重复项。如果发送电子邮件!=“email”AND source!=“number”,则插入表中,否则什么也不做。我也不想要错误报告。

我很抱歉我的措辞不好,问题听起来有点傻。

我只是很难通过下载备份和上传(如果出错)来测试无法对数据进行测试。我讨厌大数据集:)

谢谢大家的时间 -BigThings

2 个答案:

答案 0 :(得分:3)

如果这些字段上有唯一键,则可以使用带有IGNORE选项的LOAD DATA INFILE。它比逐行插入更快,并且比多插入更快。

查看http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 1 :(得分:0)

UNIQUEemail列上设置source约束。

然后做:

INSERT INTO table_name(email, source, ...) VALUES ('email', 'source', ...)
ON DUPLICATE KEY UPDATE email = email;

INSERT IGNORE不会通知您任何类型的错误。我不推荐它。我也不推荐INSERT ... WHERE NOT IN。 MySQL已经有了很好的优化功能。这就是INSERT ... ON DUPLICATE KEY UPDATE存在的原因。