日期:2014-05-18  浏览次数:20531 次

问如下SQL哪条效率高
有三张表A,B,C
A表字段:a,ab
B表字段:ab,bc
C表字段:bc,c
问如下哪条效率高?

select A.a,B.ab,C.c from A inner join B on A.ab=B.ab inner join C on B.bc=C.bc
 
 
select AA.a,AA.ab,(select c from C where AA.bc=C.bc) as c from (select A.a,A.ab,(select bc from B where A.ab=B.ab) as bc from A) AA

------解决方案--------------------
我选第一个
第一个语句较为灵活,sql引擎可以选择3中连接方式中最合适的一个
貌似第二个语句只能循环嵌套
------解决方案--------------------
1?
------解决方案--------------------
第一个

连接效率还是比较好的 

------解决方案--------------------
1
------解决方案--------------------
1
------解决方案--------------------
1、不要拿两个功能不同的语句来比较效率,这样没有意义
2、一般情况,能用连接的不要用子查询,因为连接无论从效率还是可读性还是健壮性都优于子查询
------解决方案--------------------
大致同楼上.

两条语句在不同的表数据组合(这里指两条语句对相同的数据处理, 不同指的是数据场合不同)下取的结果都不一样,根本没有可比性.

如果在数据结果一致的情况下,这种嵌套子查询的写法毫无疑问效率低下. 因为它不能被优化为连接方式执行. 某些子查询看起来效率低,但通过优化还是按内连的方式执行的.