SQL子查询和连接查询

时间:2014-08-28 17:16:01

标签: sql join optimization subquery query-optimization

我正在处理一个包含大量SQL请求的项目,我想知道:

在速度方面提供了更好的性能:

  • 加入查询
  • 子查询

例如

SELECT artistName FROM artist
JOIN group 
On group.location = artist.location
AND group.available = 'true'

SELECT artistName FROM artist,
(SELECT group.available = true) AS groupAvailable
WHERE groupAvailable.location = artist.location

什么可以为我提供更好的大查询性能。

3 个答案:

答案 0 :(得分:1)

我不太确定您的第二个查询是否是有效的SQL,但幸运的是,您的问题的答案与此无关。

表现取决于很多很多因素,所以对于这类问题你能得到的最好答案是"它取决于"。

首先,确保您需要优化查询。如果当前的运行时间是可以接受的,请不要碰任何东西(不要修理没有破坏的东西)。

如果您确实需要优化查询,请亲自试用。根据DBMS,服务器负载,数据分布以及可能的其他变量,您的性能可能会发生很大变化,因此您可以知道的唯一方法是测试您的实际情况并确定结果是否符合您的要求。

答案 1 :(得分:1)

由于您没有提到需要知道任何特定查询的答案,我假设您一般性地询问join查询是否比subqueries更快。答案是在大多数情况下join次查询比subqueries快。我也不知道答案,所以在我看到你的问题之后我研究了,并引用了我发现的内容 -

  

在JOIN中,RDBMS可以创建一个更适合您的执行计划   查询并可以预测要加载哪些数据以进行处理   节省时间,不像子查询,它将运行所有查询和   加载所有数据以进行处理。

其实你并不是第一个提出这个问题的人。如果我找到了你,另一个类似的问题也是here

答案 2 :(得分:1)

正如其他几位提到的那样,它确实只是依赖。运行查询的数据库并不总是完全遵循您编写的代码。它通常会与您期望的完全不同。实际上,您编写的两个查询都可能以完全相同的方式运行。尝试启用统计信息并运行两个查询以检查(假设您在MS SQL Server上)

SET STATISTICS IO ON
SET STATISTICS TIME ON

当您使用这两个设置运行查询时,您可以看到有多少逻辑读取和多少CPU时间。它可以帮助您识别性能瓶颈。