请教联接与子查询的比较,哪个效率高,哪个功能强,如何根据情况选择用哪一种

zghzzy 2009-07-04 05:39:12
请教联接与子查询的比较,哪个效率高,哪个功能强,如何根据情况选择用哪一种
--------------------------------------
有人说,子查询效率差,尽量不用。是这样吗?
子查询的功能,是不是一般用联接都可以实现呀,用联接是不是更好些呢?
...全文
12604 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinyuan916 2012-10-30
  • 打赏
  • 举报
回复
连接应该比子查询快啊
sunhaook488 2012-10-11
  • 打赏
  • 举报
回复
个人感觉假如A,B两张表。如果是只要查询A表中的字段的话,子查询的效率会高一些,如果是要A,B两表的字段都要显示的话,那还是需要做一次联接,也就是要产生笛卡尔积虽然可以消除。但这个时候个人觉得此时连表查询快于子查询,以上是个人之见希望多交流。有兴趣的朋友加QQ:473698708
zengqun89 2012-06-20
  • 打赏
  • 举报
回复
自己测试,自己试验一把,看看时间效果。
我自己亲测试的,在项目场景下
子查询稍微快,比联接查询快(因为有联接迪卡尔效应)100微秒以内
suano 2009-08-24
  • 打赏
  • 举报
回复
没权威结果?只针对大数据量的时候而言哪个效率高啊?
zghzzy 2009-07-05
  • 打赏
  • 举报
回复
up
LinuxAsianux 2009-07-04
  • 打赏
  • 举报
回复
SQL77 2009-07-04
  • 打赏
  • 举报
回复
首先,让我们来看看连接类型。SQL Server可以使用三种不同的技术来连接资料表:嵌套循环(nested loop),散列(hash),以及合并(merge)。一般来说,嵌套循环是最快的连接类型,但如果不可能使用嵌套循环的话,则会用到散列或者合并作为合适的连接类型。两者都比嵌套循环连接慢。




当连接大表时,则合并连接可能是最佳选项,而非嵌套循环连接。唯一的明确这一点的方式是对两者都进行测试以查看哪一个最有效率。
snwgija 2009-07-04
  • 打赏
  • 举报
回复
呵呵..个人觉得连接查询的语句句法比起子查询的语法简捷明了,以前上数据库课的时候,老师也是说连接的速度比较快....
zghzzy 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 feixianxxx 的回复:]
子查循比联接的查询快,因为联接的查询需要先做迪卡尔
我们老师说的 嘻嘻
[/Quote]
我也听说过这种说法,但是更多的说法是,联接的查询效率高,所以我想问问。
二种说法都有,找不到权威的说法。
仙道彰 2009-07-04
  • 打赏
  • 举报
回复
许多包含子查询的 Transact-SQL 语句都可以改用联接表示。其他问题只能通过子查询提出。在 Transact-SQL 中,包含子查询的语句和语义上等效的不包含子查询的语句在性能上通常没有差别。但是,在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。以下示例显示了返回相同结果集的 SELECT 子查询和 SELECT 联接:

/* 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'
feixianxxx 2009-07-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yanguoliusheng 的回复:]
子查循比联接的查询快,因为联接的查询需要先做迪卡尔
[/Quote]
我们老师说的 嘻嘻
zghzzy 2009-07-04
  • 打赏
  • 举报
回复
现在就有两种意见,大家继续。
仙道彰 2009-07-04
  • 打赏
  • 举报
回复
子查循比联接的查询快,因为联接的查询需要先做迪卡尔
feixianxxx 2009-07-04
  • 打赏
  • 举报
回复
当然功能来说 当然是子查询比较强大
feixianxxx 2009-07-04
  • 打赏
  • 举报
回复
如果能用连接 就用连接。。
字查询确实效率不高
ks_reny 2009-07-04
  • 打赏
  • 举报
回复
子查询相当于嵌套,效率比连接要差些。
仙道彰 2009-07-04
  • 打赏
  • 举报
回复
联接比in好

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧