在EXISTS查询中使用LIMIT的任何一点?

问题描述 投票:8回答:3

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

例:

IF EXISTS (
    SELECT 1
      FROM my_table
     LIMIT 1    -- can this improve performance?
)
THEN ... END IF;
mysql query-optimization exists sql-limit
3个回答
13
投票

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

底线:不要在LIMIT 1中使用EXISTS()

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


0
投票

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


0
投票

这取决于你的表中的记录数量(my_table)。如果记录不是太多,那么你将看不到任何性能改进,但如果你的表有太多记录,那么你会看到性能提升,但这也取决于很多因素正如你在select中使用那些列中的索引一样(如果你这样做,那么你也将获得覆盖索引的好处)。

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