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

swordman119 swordman119 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
假设有如下情况:
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种,在什么情况下哪种执行效率高?
...全文
评论 4
收藏 已收藏
分享
返回顶部
swordman119
Oracle 17,133 成员 55,258 内容