LIMIT在JOIN之前或之后生效吗?

问题描述 投票:5回答:1

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

如果您有这样的查询,]:>

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

这基本上将列出logins表的最后10个条目,并通过JOIN将user_id替换为username

现在,我的问题是,LIMIT是否在JOIN发生时生效(以便仅连接前10个条目)或在JOIN之后生效? (它将连接整个表,然后剪切出前10个条目)。

我问这个问题是因为示例表logins将有很多条目-而且我不确定JOIN是否在性能上过于昂贵。如果LIMIT仅会发生10个JOIN的情况,那将不是问题。

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

这是一个简单的问题-我刚刚找到了不同的答案,所以我不确定。让我描述一下:如果您有这样的查询,请执行以下操作:SELECT logins.timestamp,users.name FROM登录名LEFT JOIN用户...

mysql performance join limit
1个回答
6
投票

不用担心。 LIMIT将与连接同时发生:MySQL不会读取整个登录表,而是逐行读取(每次在用户上连接),直到找到10行为止。

© www.soinside.com 2019 - 2024. All rights reserved.