请教SQL语句的效率 ( 积分: 100 )

  • 主题发起人 主题发起人 willing66
  • 开始时间 开始时间
W

willing66

Unregistered / Unconfirmed
GUEST, unregistred user!
我有两个表,A(FCol1, FCol2)
B(FCo1, FCol2)
求A中FCol1不在B中FCol1
因为表A和表B都是非常大的表,如果用In、或not Exists语句速度就非常慢。
请问题有没有什么快速处理的方法。
 
因为表A,B是同构的,有些SQL语言支持差集计算,你可查阅相关资料
 
两个表可能不会是同构的,我这里只是举例说就是,不知道有没有更有效率的SQL语句。
 
exists的效率也不高,或者有没有变通的方法。
如果两张表都上百万后,这样的相关查询效率是非常的低的。
 
建了索引花费的时间也还是很大。还有没有办法。
 
以前碰过,改了查询语句,效率相差很大:

select * from a where FCol1 not in (select FCol1 from b)

->select a.FCol1 from a,b where a.Fcol1<>b.Fcol1
 
To jenhon:
select * from a where FCol1 not in (select FCol1 from b)
select a.FCol1 from a,b where a.Fcol1<>b.Fcol1
这两个语句不同意的语句,只有其中一个记录数为1或者0时结果才会相同。
 
select C.FCol1,C.FCol2 from (select A.*,B.FCol1 as tempcolum from A left join B on A.FCol1=B.FCol1) as C where C.tempcolum is null
改造自http://www.cnblogs.com/bbcw/archive/2005/02/04/101684.html
试下吧,或许有点帮助!
 
select cc.id,cc.value from (select aa.*,bb.id as tempcolum from aa left join bb on aa.id=bb.id) as cc where cc.tempcolum is null
我也了一个那篇文章,这条语句效率应该也不会更好,但是它提供了一个变通的方法。
 
谢谢大家的指。
 
谢谢大家.
 
后退
顶部