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

时间:2016-01-13 05:41:28

标签: mysql query-optimization exists sql-limit

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

示例:

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

3 个答案:

答案 0 :(得分:12)

EXISTS()的目的是执行查询,直到它可以决定该表中是否有任何行匹配WHERE条款。也就是说,它在逻辑上与LIMIT 1做同样的事情。 <{1}}可能在某些圈子中被称为EXISTS

结论:不要在semi-join内使用LIMIT 1

补遗:保罗指出,EXISTS() LIMIT(或OFFSET)确实有意义。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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