mysql - 在 JOIN 中限制结果的最有效方法?

标签 mysql optimization select

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

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

我能想到的唯一方法是在 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 知识感觉就像做错了什么。

是否有更有效或更快速的方法来执行此操作,或者这很好吗?

顺便...

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

最佳答案

我觉得很完美。

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

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

关于mysql - 在 JOIN 中限制结果的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064655/

相关文章:

mysql - 从两行中选择数据到两列中作为输出 mysql 数据透视表

php - 你能以 "IF"开始 mysql 语句吗?

optimization - GHC 没有优化除主模块以外的模块

sql - 如果我同时拥有(A,B)和(B,A)则仅选择一对

mysql - 必须声明标量变量

mysql - 无法比较日期

php - 登录和注册系统

jquery - 来自 MySQL 数据库的谷歌地图的坐标,优化的正确方法?

.net - 使用 .NET Framework 4.0 dll 代替 2.0 dll 有什么优势吗?

excel - 在 pandas 数据框架上使用运算符链接来读取数据、删除不需要的列、重命名列以及读取几行