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

Kat*_*tai 5 mysql performance join limit

这是一个简单的问题 - 我刚刚找到了不同的答案,所以我不确定.让我来形容:

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

SELECT logins.timestamp, users.name
FROM logins 
LEFT JOIN users 
ON users.id = logins.user_id
LIMIT 10
Run Code Online (Sandbox Code Playgroud)

这基本上会列出登录表的最后10个条目,用JOIN替换user_id和用户名.

现在我的问题是,LIMIT是否在连接发生时生效(这样它只加入前10个条目)或加入后?(它将加入整个表格,然后删除前10个条目)

我问这个是因为样本表logins会有很多条目 - 而且我不确定连接是否太明显了.如果LIMIT只发生10个JOIN,那就不是问题了.

提出这个问题的第二个问题:如果添加了DISTINCT,功能是否相同?10个参赛作品还会停止吗?不,这不会由ORDER BY订购

Kon*_*rak 6

别担心.LIMIT将在连接的同时发生:MySQL不会读取整个登录表,而是逐行读取(每次加入用户),直到找到10行.

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