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

时间:2012-06-23 19:35:12

标签: mysql performance join limit

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

如果您有查询,请执行以下操作:

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

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

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

我问这个是因为示例表logins会有很多条目 - 而且我不确定连接是否过于夸张性能。如果LIMIT只发生10个JOIN,那不会有问题。

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

1 个答案:

答案 0 :(得分:6)

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

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