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

zghzzy 2009-07-04 05:39:12
请教联接与子查询的比较,哪个效率高,哪个功能强,如何根据情况选择用哪一种
--------------------------------------
有人说,子查询效率差,尽量不用。是这样吗?
子查询的功能,是不是一般用联接都可以实现呀,用联接是不是更好些呢?
...全文
12538 17 打赏 收藏 转发到动态 举报
写回复
用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好
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。 PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 本课程作为PostgreSQL数据库管理一,主要讲解以下内容:1.     PostgreSQL安装和环境准备2.     PostgreSQL数据查询3.     PostgreSQL 数据过滤4.     PostgreSQL 多表的联接5.     PostgreSQL数据的分组6.     PostgreSQL合集的操作7.   PostgreSQL 合集的分组

34,594

社区成员

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

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