问一条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有很多的时候,肯定出错。 有道理 |