我需要导入一个非常大的联系人列表(csv格式的名称和电子邮件,PHP - > MySQL)。我想跳过现有的电子邮件。我当前的方法在生产数据库中非常慢,有很多数据。
假设有100个联系人(可能是10,000个联系人)
原创步骤
这很慢。
我想改善流程和时间。
我想过两种方法。
方法1
优点
缺点
方法2
优点
缺点
有任何反馈意见吗?最常见的是什么?将大量地址导入数据库的有效方法?
=====
以下是方法1的更多细节。您认为这是一个好主意吗?
有4个步骤。
//清除用户的临时数据
delete max_addressbook_temp where book_user_id =
//插入导入数据,而不是检查重复的
insert into max_addressbook_temp values (), (), ()....
//选择要显示或计数的重复数据
select * from max_addressbook_temp t1, max_addressbook t2
where t1.book_user_id = t2.book_user_id
and t1.book_email = t2.book_email
//插入不重复的数据
insert into max_addressbook t1
select * from max_addressbook_temp t2
where t1.book_user_id = t2.book_user_id
and t1.book_email <> t2.book_email
答案 0 :(得分:1)
问:不使用mySQL BULK INSERT?
实施例
LOAD DATA INFILE 'C:\MyTextFile'
INTO TABLE myDatabase.MyTable
FIELDS TERMINATED BY ','
附录:
听起来你实际上是在问两个单独的问题:
Q1:如何将.csv文件读入mySQL数据库?
答:我敦促您考虑LOAD DATA INFILE
Q2:我如何&#34;差异&#34; .csv中的数据与mySQL中的数据(两者中的行的交集;或者一行中的行,而不是另一行中的数据)?
答:没有效率&#34;方法。无论你怎么做,你都可能会做full-table scan。
我建议如下:
将.csv数据加载到临时表
执行两个表中的INTERSECT:
SELECT tableA.id 来自tableA WHERE tableA.id IN(SELECT id FROM tableB);
保存&#34;相交&#34;的结果查询
将.csv数据加载到实际的