比较两个表中两个字段数值的效率问题?(50分)

  • 主题发起人 主题发起人 j_xu
  • 开始时间 开始时间
J

j_xu

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库为Mssql2k
两个表字段大至相同,表中会有80、90万条左右的记录(以后还可能会增长)。
通过两个关联字段(主键)去比较另两个字段的数值,不等时要做处理。

目前我是一次选出不等的记录,
.....
from t1, t2
where t1.f1=t2.f1 and t1.f2=t2.f2 and t1.f3<>t2.f3 and t1.f4<>t2.f4
再循环去处理。

测试时:
服务器:pc(cpu 900, ram 256)
测试数据10万条。(全部处理完需要半小时)

正式上线后:
服务器会使用HP LH6000

有经验的给个意见。执行的速度怎么样?或者怎样处理效率较高?

 
为什么一定要采用批处理呢?可以在insert、update一条记录的时候进行比较。
 
to jopi:
你的意思是在t1上加触发器?
 
这样的查询一定要用主键,不要用这样的sql语句,效率太差!
 
1、不管如何处理都必须建立合适的主键和索引;
2、如果不等时要做的处理工作是简单的(update 使两个表的字段相等),建议采用一条SQL语句来实现
(update t1 set ... from t2 where t1.f1=t2.f1 and t1.f2=t2.f2 and t1.f3<>t2.f3 and t1.f4<>t2.f4)
最好是将此语句建立成存储过程调用,效率会提高不少;
3、在 where ...条件中可以加上 t1.主键<>null and t2..主键<>null 部分,看上去好象是废话,不过你可以试试,
的确可以提高不少部分效率;
 
首先,在f3, f4字段上分别建立索引
然后,改用下列语句
SELECT T1.F3 AS T1F3 , T1.F4 AS T1F4, T2.F3 AS T2F3, T2F4 AS T2F4
FROM T1
LEFT JOIN T2
ON (T1.F1=T2.F1 AND T1.F2 = T2.F2)
WHERE (T1.F3<>T2.F3) OR (T1.F4<>T2.F4)
应该会有惊喜的
 
to fatbug:
谢谢!效率是提高不少。
但不知真正上线后,80,90万条记录。应行时间能否让人接受?
有经验的请帮我估算一下大约需要多少时间?
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
回复
0
查看
780
爱音乐的孩子是小白
后退
顶部