问一条sql执行效率的问题

czmmiao 2011-02-21
Mrpublic 写道
sjynt131 写道
试试这个:
insert into a(id,status)
select b.id,0 from b left join a on b.id=a.id
where a.id is null;


帮分析指点一下:
1. a.id is null 不就是不存在的数据吗?
2. b.id =a.id 不就是b.id=null ? id 为null?


理解错误,上面的SQL是左连接,会产生存在于B表且不存在于A表的结果集,同时取a.id为空即为索求结果
zrhcslgxy 2012-05-28
yidao620c 写道
使用Oracle10G增强的merge into语句:

MERGE INTO A
  USING B
    ON (A.ID = B.ID)
  WHEN NOT MATCHED THEN
    INSERT (ID, status)
    VALUES (B.ID, '0');

对于大量数据的话,效率很低!
xzk3761 2012-05-31
随着索引等数据库object的增加,A表插入一条数据可能都非常慢,在一定情况下联合查A表风险很大的,所以查询越简单越好,而且条件最好不要以A表的字段座位条件,在一定条件下,我的做法是  insert B表所有记录到临时表,   delete from 临时表 where id in (select id from A where A.id in (select id from B))

insert A select 临时表.

其中select id from A where A.id in (select id from B) 没有采用关联做,是因为正式表可能都是多字段多索引的,有可能由于优化过的原因导致联合查询反而慢,再者B和临时表数据量不会很大,估计也有分区之类,所以不会很慢
wx3244224 2012-10-19
ytsmtxxi 写道
Felix韩 写道
insert into A(id,status)
select id, 0 from B
where id in (-- 获得存在于B中而不存在于A中的id;
select id from B
except
select id from A
)
希望对你有所帮助!



这样子不可行。当id有很多的时候,肯定出错。



有道理
Global site tag (gtag.js) - Google Analytics