LIMIT最有效的方法是加入JOIN?

时间:2012-04-08 17:08:34

标签: mysql optimization select

我在MySQL查询中有一个相当简单的一对多类型连接。在这种情况下,我想通过左表限制我的结果。

例如,假设我有一个accounts表和一个comments表,我想从accounts和所有关联的comments中提取100行每个行。

我认为这样做的唯一方法是使用FROM子句中的子选择而不是简单地选择FROM accounts。这是我目前的想法:

SELECT a.*, c.* FROM 
    (SELECT * FROM accounts LIMIT 100) a
    LEFT JOIN `comments` c on c.account_id = a.id
    ORDER BY a.id

但是,每当我需要进行某种类型的子选择时,我的中级SQL知识就会感觉它做错了。

是否有更高效或更快的方式来做到这一点,还是这样做还不错?

顺便说一句......

这可能是绝对最简单的方法,我可以作为答案。我只是想弄清楚是否还有另一种方法可以在速度方面与上述陈述竞争。

2 个答案:

答案 0 :(得分:1)

不,查询很好,就像它的方式一样。您可能希望过滤字段,而不是a.*c.*

答案 1 :(得分:1)

看起来很完美。

只是想知道从上面的查询中收到少于或多于100行是否合适。 因为如果对于accounts表的特定行,comments表中没有行,那么您将获得少于100行。同样,如果comments表中有accounts表中的行有多个匹配行,那么您可能会获得超过100行。

请参阅:How can I optimize this query, takes more than a min to execute