1

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

我想要做的是在不覆盖数据的情况下将 IMPORT a CSV 添加到表中。

在我做这样的事情之前;如果不在,则插入(从 tblName 中选择电子邮件,其中 source = "number" and email != "email") INTO (email...) VALUES ("email"...)

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

否则我会在电子邮件列上使用唯一的。

简而言之,我想通过检查两件事来尽快插入而不向表中引入重复项。如果 email != "email" AND source != "number" 然后插入到表中,否则什么也不做。而且我也不想要错误报告。

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

我只是很难适应无法通过下载备份并在出现问题时上传来对数据进行测试。我讨厌大型数据集:)

谢谢大家的时间-BigThings

4

2 回答 2

3

如果您在这些字段上有唯一键,则可以将 LOAD DATA INFILE 与 IGNORE 选项一起使用。它比逐行插入更快,也比多插入更快。

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

于 2011-08-28T17:08:18.607 回答
0

对和列设置UNIQUE约束。emailsource

然后做:

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存在。

于 2011-08-28T17:08:53.903 回答