Oracle查询A表不在B表中数据的四种方法,这里以用户表和索引表为例,即查询用户字段没有建索引的表名称。
以下查询耗时为个人数据库实际情况检测,仅供参考。
select * from user_tab_columns a–耗时6秒
where concat(a.table_name,a.column_name)
not in(
select concat(b.table_name,b.column_name)
from user_ind_columns b
);
select * from user_tab_columns a–耗时0.498秒
where not exists (select 1
from user_ind_columns b
where concat(a.table_name,a.column_name) = concat(b.table_name,b.column_name)
);
select * from user_tab_columns a,user_ind_columns b–耗时0.781秒
where a.table_name = b.table_name(+)
and a.column_name = b.column_name(+)
and b.column_name is null;
select a.table_name,a.column_name–耗时0.267秒
from user_tab_columns a
minus
select b.table_name,b.column_name
from user_ind_columns b;
可见选择不同的办法耗时也会不一样。