2013-04-01 36 views
1

我有以下工作选择查询(实际的查询是巨大的许多连接) 主查询:MySQL的高效选择查询(使用加入或不)

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 

(即,如果用户没有保存工作,将返回“零”的选择会员)

方法2 :
使用主查询的主要结果,然后为每个结果选择(即环SQL查询)

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

回答

0

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

0

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

虽然底层逻辑本质上是相同的(即:您将相同的列与相同的值进行比较),而使用LEFT JOIN解析时,LEFT JOIN查询的分析成本更高,但仅限于对服务器进行1次往返访问,而循环查询则进行多次往返以实现相同的结果。

一般来说,很难给出这样的问题的广义答案,因为它的大部分取决于您的特定设置和数据,但在这种情况下,您应该看到单个LEFT JOIN查询显着更快。

我在过去使用LEFT JOIN方法进行基准测试的速度一直很快。