【发布时间】:2011-05-07 00:51:34
【问题描述】:
我正在尝试从大型数据库中导入数据。我有两张表,有几十万条记录。我必须在两个表中搜索数据,然后将该记录插入到一个新表(第三个表)中,如果该记录已经存在于第三个表中,那么我必须更新第三个表中的一个列记录。
这听起来很容易,但处理起来需要很长时间。
以下是示例查询和伪代码:
select * from table1 INNER JOIN table2 USING(id)
search in table 3 ->
if record exist{
update record in table 3 (update counter in a column)
}else{
Insert new record in table 3
}
第一张和第二张表有超过二十万条记录。当我开始在第三张表中插入记录时,它会降低整个速度,因为它还必须在第三张表中搜索以更新或插入记录。
Database Name = MySql
Language = Php
有什么问题?我该如何改进呢?我不能等待几个小时来处理它:(
谢谢
编辑:
表3中,id有主键,其他列正常。数据库模式太大而且复杂。你们要吗,我这里贴上百行?
请大家指出我的伪代码和查询中的错误吗?我可以使用什么索引或结构来提高性能?
结构
Table 1 - usr_id, first name, last name (usr_id is primary key)
Table 2 - id, usr_id, amount (id is primary key and usr_id is foreign key)
Table 3 - new_id , first name, last name, usr_id, total_amount (new_id is primary key and usr_id is foreign key
)
我检查表 3 的名字和姓氏是否相同,然后更新总金额,如果它们不同,则插入一条新记录
【问题讨论】:
-
您能发布您的数据库架构吗?听起来 table3 的索引不正确。
-
您必须向我们展示更多有关您的表结构和索引的信息。