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

请教联接与子查询的比较,哪个效率高,哪个功能强,如何根据情况选择用哪一种
请教联接与子查询的比较,哪个效率高,哪个功能强,如何根据情况选择用哪一种
--------------------------------------
有人说,子查询效率差,尽量不用。是这样吗?
子查询的功能,是不是一般用联接都可以实现呀,用联接是不是更好些呢?

------解决方案--------------------
联接比in好
------解决方案--------------------
子查询相当于嵌套,效率比连接要差些。
------解决方案--------------------
如果能用连接 就用连接。。
字查询确实效率不高

------解决方案--------------------
当然功能来说 当然是子查询比较强大

------解决方案--------------------
子查循比联接的查询快,因为联接的查询需要先做迪卡尔
------解决方案--------------------
许多包含子查询的 Transact-SQL 语句都可以改用联接表示。其他问题只能通过子查询提出。在 Transact-SQL 中,包含子查询的语句和语义上等效的不包含子查询的语句在性能上通常没有差别。但是,在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。以下示例显示了返回相同结果集的 SELECT 子查询和 SELECT 联接:

SQL code
/* SELECT statement built using a subquery. */
SELECT Name
FROM AdventureWorks.Production.Product
WHERE ListPrice =
    (SELECT ListPrice
     FROM AdventureWorks.Production.Product
     WHERE Name = 'Chainring Bolts' )

/* SELECT statement built using a join that returns
   the same result set. */
SELECT Prd1. Name
FROM AdventureWorks.Production.Product AS Prd1
     JOIN AdventureWorks.Production.Product AS Prd2
       ON (Prd1.ListPrice = Prd2.ListPrice)
WHERE Prd2. Name = 'Chainring Bolts'

------解决方案--------------------
呵呵..个人觉得连接查询的语句句法比起子查询的语法简捷明了,以前上数据库课的时候,老师也是说连接的速度比较快....
------解决方案--------------------
首先,让我们来看看连接类型。SQL Server可以使用三种不同的技术来连接资料表:嵌套循环(nested loop),散列(hash),以及合并(merge)。一般来说,嵌套循环是最快的连接类型,但如果不可能使用嵌套循环的话,则会用到散列或者合并作为合适的连接类型。两者都比嵌套循环连接慢。

 


当连接大表时,则合并连接可能是最佳选项,而非嵌套循环连接。唯一的明确这一点的方式是对两者都进行测试以查看哪一个最有效率。