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

关于表关联时SQL效率的问题
一般两个表关联我知道常用的有以下三种方法
SQL code

1:SELECT * FROM A,B WHERE A.ID=B.ID AND A.NAME='ASDF'
2:SELECT * FROM A INNER OUTER JOIN B ON A.ID=B.ID AND A.NAME='ASDF'
3:SELECT * FROM A WHERE A.ID=(SELECT ID FROM B WHERE NAME='ASDF')


请问这三种方法有什么区别,在数据量大的时候哪种更有效呢?

------解决方案--------------------
要看执行计划,一般情况下两者是一样的
------解决方案--------------------
还是要从执行计划分析
------解决方案--------------------
还可以用exists,
一般来说效率是一样的,SQL Server数据库引擎会对查询进行优化
------解决方案--------------------
首先,2,3都是错的

SQL code
2:SELECT * FROM A INNER JOIN B ON A.ID=B.ID AND A.NAME='ASDF'
3:SELECT * FROM B WHERE B.ID IN (SELECT ID FROM A WHERE NAME='ASDF')  --这个结果字段是不同的

------解决方案--------------------
第二种是错误的,
SQL code

SELECT * FROM A INNER JOIN B ON A.ID=B.ID AND A.NAME='ASDF'

------解决方案--------------------
SQL code
SELECT * FROM A INNER JOIN B ON A.ID=B.ID WHERE A.NAME='ASDF'
/*常规这个写法*/

------解决方案--------------------
用连接写法吧