6

这是一个简单的问题——我只是找到了不同的答案,所以我不确定。让我描述一下:

如果你有一个查询,像这样:

SELECT logins.timestamp, users.name
FROM logins 
LEFT JOIN users 
ON users.id = logins.user_id
LIMIT 10

这基本上将列出表的最后 10 个条目,用JOINlogins替换。user_idusername

现在我的问题是,LIMIT 是在 JOIN 发生时生效(因此它只加入前 10 个条目)还是在 JOIN 之后生效?(它将加入整个表格,然后删除前 10 个条目)。

我问这个是因为示例表logins会有很多条目——而且我不确定 JOIN 是否在性能方面过于昂贵。如果 LIMIT 只会发生 10 次 JOIN,那将不是问题。

提出的第二个问题:如果添加了 DISTINCT,功能是否相同?它还会在 10 个条目时停止吗?不,这不会由 ORDER BY 订购。

4

1 回答 1

7

不用担心。LIMIT 将与 join 同时发生:MySQL 不会读取整个 logins 表,而是逐行获取(每次加入用户),直到找到 10 行。

请注意,如果 users.id 在表中出现两次,则 JOIN 将复制登录行并添加每个用户行。总行数仍为 10,但您将有 9 次登录。

于 2012-06-23T19:38:31.980 回答