我有一个900万行表,由于其庞大的规模,我很难处理所有这些数据。
我想要做的是在表中添加导入CSV而不覆盖数据。
在我做这样的事情之前;如果没有INSERT(从tblName选择电子邮件,其中source =“number”和email!=“email”)INTO(电子邮件...)VALUES(“email”...)
但我担心我会再次崩溃服务器。我希望能够将10,000个行插入表中,但前提是它不在表中,而不是source =“number”。
否则我会在电子邮件栏中使用unique。
简而言之,我希望尽快插入,而不是通过检查两件事来向表中引入重复项。如果发送电子邮件!=“email”AND source!=“number”,则插入表中,否则什么也不做。我也不想要错误报告。
我很抱歉我的措辞不好,问题听起来有点傻。
我只是很难通过下载备份和上传(如果出错)来测试无法对数据进行测试。我讨厌大数据集:)
谢谢大家的时间 -BigThings
答案 0 :(得分:3)
如果这些字段上有唯一键,则可以使用带有IGNORE选项的LOAD DATA INFILE。它比逐行插入更快,并且比多插入更快。
答案 1 :(得分:0)
在UNIQUE
和email
列上设置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
存在的原因。