日期:2014-05-17  浏览次数:20503 次

关于多表连接查询的效率
以下三种连接查询的效率如何?
1.
select s.name,s.age
from s 
inner join sc on s.id=sc.sid
inner join c on sc.cid=c.id
where c.name='计算机'
2.
select s.name,s.age
from s,sc,c
where s.id=sc.sid and sc.cid=c.id and c.name='计算机'
3.
select name,age
from s
where id in
(
select sid from sc where cid =
(
select id from c where c.name='计算机'
)
)

------解决方案--------------------
第1和第2种写法,效率是一样的。本质上都是通过表的内连接来实现,只是写法不同而已,第1个采用了ANSI SQL的标准写法,而第2种呢,在关联的表很多的情况下,看着有点头晕,一堆的连接条件。


而第3种,我觉得效率比可能会比第1和2种的效率,要差。为什么呢?呵呵 看着有点头晕。

其实sql server在解析这些sql语句,从而生产执行计划时,如果你的语句写法,比较简洁,那么往往,更有可能生产好的执行计划,所以速度会更快。

说到底,sql server和人是一样的,也需要来理解我们写的sql语句,如果你写的语句,粗一看,就让人头晕,我想sql server也需要花更多的cpu时间,来解析,分析,标准化,这个语句的,所以消耗的资源就会更多,速度自然就会慢的

------解决方案--------------------
第一个效率最高,第二,第三看你在各个表格中的数据行数了
第二个等于full join,效率肯定比inner join 差,小数据量表格,感觉不出差异