1

我有以下作业选择查询(实际查询很大,有很多连接)主查询:

SELECT id FROM job LIMIT 20

当用户登录时,我想选择用户是否保存了作业。(许多用户,但一个主要结果)

我的问题是更有效的方法?(考虑查询缓存、缓冲池等)
方法1:

SELECT id, Member 
FROM job AS t1 LEFT JOIN Member AS t2 ON (t1.id=t2.Job) LIMIT 20

(即,如果用户没有保存作业,它将为 Select Member 返回“Null”)

方法2:
对主结果使用Main查询,然后为每个结果选择(即循环sql查询)

 SELECT Member FROM Member WHERE Member=1 AND Job=(each job id)
4

2 回答 2

0

左连接的方法几乎可以保证效率更高。

虽然底层逻辑基本相同(即:您将同一列与相同的值进行比较)并且 LEFT JOIN 查询的解析成本更高,但使用 LEFT JOIN 时,您只需要进行 1 轮 -在使用循环查询时访问服务器,您正在执行多次往返以获得相同的结果。

一般来说,很难对此类问题给出一般性的答案,因为这在很大程度上取决于您的特定设置和数据,但在这种情况下,您应该会看到单个 LEFT JOIN 查询明显更快。

我过去对此类查询进行了基准测试,LEFT JOIN 方法总是更快。

于 2013-04-01T20:28:25.307 回答
0

一般来说,捆绑到单个查询中以减少到数据库的往返、查询解析成本等效率更高。但是,如果捆绑到单个查询中意味着返回一堆您不需要的数据,那么它可能并不比单个查询更有效。

于 2013-04-01T20:25:11.657 回答