在 EXISTS 查询中使用 LIMIT 有什么意义吗?

Any point in using LIMIT in EXISTS query?

LIMIT 添加到 EXISTS 查询是否有任何性能优势,或者 MySQL 会自行应用限制?

示例:

IF EXISTS (
    SELECT 1
      FROM my_table
     LIMIT 1    -- can this improve performance?
)
THEN ... END IF;

稍微摆弄一下我的查询,我注意到如果 LIMIT 设置为 0,EXISTS 仍然是 returns 1。我认为这表明它被忽略了。

这取决于您的 table(my_table) 中有多少条记录。如果记录不是太多,那么您不会看到任何性能改进,但如果您的 table 太多了很多记录然后你会看到性能改进,但这也取决于许多因素,因为你在 select 中使用的列中有索引(如果你这样做,那么你将获得覆盖索引的好处也)。

EXISTS() 的目的是执行查询 直到 它可以决定是否有 any 行table 匹配 WHERE 子句。也就是说,它在逻辑上与 LIMIT 1 做同样的事情。 EXISTS在某些圈子里可能被称为semi-join

底线:不要在 EXISTS().

中使用 LIMIT 1

附录:正如 Paul 指出的那样,LIMIT OFFSET(或 LIMIT m,n)确实有意义。