a(a1,a2,a3,a4)
b(b1,1b2,b3,b4,b5)
所有字段都是number型要求查询b1中有但是a1中不存在的表a的记录
select * from a where a.a1 not in (select b1 from b)
但是这两个表的记录都有500万条,上边查询速度非常慢
有没有办法快一点select * from a where a.a1 in (select b1 from b)
如果用in的话可以用到索引,但是如果用not in 就用不到索引,
这是为什么?
调试欢乐多
FROM b
LEFT OUTER JOIN a
ON(a.a1=b.b1)
WHERE a.a1 IS NULL;
A2 NUMBER(15) N
A3 NUMBER(15) N
A4 NUMBER(16) Y
A5 NUMBER(16,2) Y
A6 NUMBER(8) Y
A7 NUMBER(16,2) Y
索引:
A I_A_1 Normal A3
A I_A_2 Normal A1, A6
A I_A_3 Normal A1, A2, A3, A6
A PK_A Unique A1, A2, A3
B表
B1 VARCHAR2(12) N
B2 NUMBER(5) N
B3 NUMBER(15) N
B4 NUMBER(10,2) Y
B5 NUMBER(10,2) Y
B6 NUMBER(8) N 索引:
B PK_B Unique B1, B3, B6 在这两个表中
A1=B1,A2=B2,A3=B3
但是表B中的记录比A中少,要求查询出表A中A3存在,但是表B中B3不存在的表A中的所有记录
select A3,A7 FROM A WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.A3=B.B3)
SELECT A3,A7 FROM A WHERE A3 NOT IN (SELECT B3 FROM B)
用上边这两个语句速度都很慢,表A中有500万条记录,表B中有10万条记录。
到底应该如何查询啊?
请各位高手不吝赐教,多谢!
select * from a,b where b.b1=a.a1(+) and a.a1 is null;