关联查询和分开查询的选择?

swordman119 2011-09-13 10:31:18
假设有如下情况:
1、数据库为Oracle和MS SQLServer两种可能
2、有A、B、C 共3张表
3、其中A.id=B.a_id,B.id=C.b_id(其中A.id,B.id均为varchar[20])
4、A和B是1对多,B和C是1对多的关系
5、A表约有400万行,B表约有500万行,C表约有1200万行数据
6、A.id,B.id,C.id为主键
7、B.a_id,C.b_id上有普通索引

目标:
要取得如下字段的值
A.id,A.field2,A.field3,A.field4,
B.id,B.field2,B.field3,B.field4,
C.id,C.field2,C.field3,C.field4
假设数据库中A.id='100203914'的记录(结果集不会超过50条)

现在有2种查询方法:
1、直接进行关联查询
select
A.id,A.field2,A.field3,A.field4,
B.id,B.field2,B.field3,B.field4,
C.id,C.field2,C.field3,C.field4
from A,B,C where A.id=B.a_id and B.id=C.b_id
and A.id='100203914'

2、分开查询
a. select A.id,A.field2,A.field3,A.field4 where A.id='100203914';
b. select B.id,B.field2,B.field3,B.field4 where B.a_id='100203914';
c. select C.id,C.field2,C.field3,C.field4 where C.b_id in (步骤b的结果);

上面2种,在什么情况下哪种执行效率高?
...全文
210 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
baobeizhu100 2011-09-14
  • 打赏
  • 举报
回复
喜欢用关联查,具体效率的话,还得测试啊
  • 打赏
  • 举报
回复

--取交叉数据
select
A.id,A.field2,A.field3,A.field4,
B.id,B.field2,B.field3,B.field4,
C.id,C.field2,C.field3,C.field4
from A join B on A.id=B.a_id join C on B.id=C.b_id
where A.id='100203914';

这样写的话,执行计划,先过滤,后连接,效率高些
kingkingzhu 2011-09-13
  • 打赏
  • 举报
回复
这个应该不是效率的问题吧
2中查询得到的结果集完全不同的啊
你的第二个查询的结果集能当1的用么???
HUONG 2011-09-13
  • 打赏
  • 举报
回复
比较2个sql的执行计划,就知道结果了

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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