关联查询和分开查询的选择?
假设有如下情况:
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种,在什么情况下哪种执行效率高?
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种,在什么情况下哪种执行效率高?
...全文
相关推荐
三表关联查询
三表关联查询练习数据库和练习sql
Mybatis 一对多和多对一关联查询问题
主要介绍了Mybatis 一对多和多对一关联查询问题,需要的朋友可以参考下
mysql关联查询
mysql关联,左关联,右关联,内连接,外连接,交叉连接
MongoDB多表关联查询操作实例详解
主要介绍了MongoDB多表关联查询操作,结合实例形式详细分析了MongoDB数据库实现多表关联查询的相关原理与实现技巧,需要的朋友可以参考下
Mybatis实现关联查询一对一和一对多实现
Mybatis实现关联查询一对一和一对多实现,具体效果看博文 http://blog.csdn.net/evankaka/article/details/45674101


