清理数据库垃圾数据时碰到的问题
有a表(主表)(id)
b表(从表)(id,aid)
寻找b表中和a表没关系的数据。在平时的操作中,经常删了a表数据,忘记删b表数据,因此造成b表中存在垃圾数据。开始写的语句select b.id from b where b.aid not in (select a.id from a)a表记录数大概100k,b表记录数大概1M。运行上面代码1分钟之后,我强制结束,找到0条记录。后来改进了一下select b.id from b left join a on b.aid=a.id where a.id is null
运行大概不到1秒钟便结束了,查询到1条数据。由此想了解一下left join 的工作原理
有a表(主表)(id)
b表(从表)(id,aid)
寻找b表中和a表没关系的数据。在平时的操作中,经常删了a表数据,忘记删b表数据,因此造成b表中存在垃圾数据。开始写的语句select b.id from b where b.aid not in (select a.id from a)a表记录数大概100k,b表记录数大概1M。运行上面代码1分钟之后,我强制结束,找到0条记录。后来改进了一下select b.id from b left join a on b.aid=a.id where a.id is null
运行大概不到1秒钟便结束了,查询到1条数据。由此想了解一下left join 的工作原理
解决方案 »
- 请教一条SQL查询问题
- 求求大哥大姐了,救命啊.出现Inside isClusterMode,bCluster is :false错误了.
- 求助:从informix向Oracle做数据迁移有什么好的方法
- Oracle服务重启后原来创建的表被清空了
- 計算數量﹐请高人指点 ﹗
- v$parameter基于哪些表?急问
- 救急!救急!怎样在oralce中插入长度大于4000的字符串!
- 如何在VC环境下利用OO4O接口访问ORACLE?(在VC6环境下使用过OO4O访问ORACLE的DX请进)
- 求助一个问题关于sql字符串合并
- oracle 字段类型问题 100分
- 关于Oracle 存储过程 事务控制问题
- 定义的变量值为null
你用not in需要进行全表遍历
你用这个比较一下
select b.id from b where
not exists(select 1 from a where id=b.aid)
比较执行计划
select b.id from b where b.aid not in (select a.id from a where a.id is not null)
有a表(主表)(id)
b表(从表)(id,aid) 如果是图方便的话,可以在定义表的时候,标志为delete cascade
alter table b
add constraint fk_b_2_a foreign key(aid) references a(id) on delete cascade;这样删除主表的时候,会cascade了。
现在你要清理的话,按上面朋友说的,提高性能就可以了