oracle联合查询优化问题

ascendlin 2011-12-28 12:16:54
假设:(只是假设)
现在比如我有三张表test1 ,test2,test3

create table test1(
id number primary key,
name1 varchar2(20),
t_test2_id number foreign key--------指向test2
)
create table test2(
id number primary key,
name2 varchar2(20),
t_test3_id number foreign key--------指向test3
)
create table test3(
id number primary key,
name3 varchar2(20)
)

我现在需要每个表中的name*那个字段,并且排除表2中的一些记录,比如id为1,3,5,7,9,10这些的。

直接用

select t1.id,t1.name1,t2.name2,t3.name3
from test1 t1,test2 t2,test3,t3
where t1.t_test2_id = t2.id and t2.t_test3_id = t3.id and t2.id not in(1,3,5,7,9,10);

这样貌似很低的效率,假设数据量过千万
...全文
96 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zujinsheng 2011-12-28
  • 打赏
  • 举报
回复
在t2.id,t3.id上建唯一索引..
在t1.t_test2_id,t2.t_test3_id 建非唯一索引
zujinsheng 2011-12-28
  • 打赏
  • 举报
回复
from t1,t2,t3 按表的大小从大到小排列..
not in 改成 not exists

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧