一个菜鸟问题,着急,求救

[复制链接]
查看11 | 回复7 | 2008-2-13 12:43:03 | 显示全部楼层 |阅读模式
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)
但是这两个表的记录都有100万条,上边查询速度非常慢
有没有办法快一点
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
not in不會用到索引的, 用 JION 可以嗎?
I am 菜鸟,too.^_^
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
not exists
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
select * from a where not exists (select b1 from b where a.a1=b.b1)
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
为何如果是in操作符的话能用到索引,可是如果用not in操作符的话用不到索引
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
最初由 mywzj668 发布
[B]select * from a where not exists (select b1 from b where a.a1=b.b1) [/B]

关联字段上有索引吗?
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
看是否索引,如果有的話,分析一下表和索引再試試!
回复

使用道具 举报

千问 | 2008-2-13 12:43:03 | 显示全部楼层
A表
A1
VARCHAR2(12)
N

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万条记录。
到底应该如何查询啊?
请各位高手不吝赐教,多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行