将LIMIT
添加到EXISTS
查询中是否有任何性能优势,或MySQL是否会自行应用限制?
例:
IF EXISTS (
SELECT 1
FROM my_table
LIMIT 1 -- can this improve performance?
)
THEN ... END IF;
EXISTS()
的目的是仅执行查询,直到它可以确定该表中是否有与WHERE
子句匹配的行。也就是说,它在逻辑上与LIMIT 1
做同样的事情。在某些圈子里,EXISTS
可能被称为semi-join
。
底线:不要在LIMIT 1
中使用EXISTS()
。
附录:正如保罗指出的那样,带有LIMIT
(或OFFSET
)的LIMIT m,n
确实有意义。
稍微摆弄我的查询,我注意到如果EXISTS
设置为0,LIMIT
仍然返回1.我认为这表明它被忽略了。
这取决于你的表中的记录数量(my_table)。如果记录不是太多,那么你将看不到任何性能改进,但如果你的表有太多记录,那么你会看到性能提升,但这也取决于很多因素正如你在select中使用那些列中的索引一样(如果你这样做,那么你也将获得覆盖索引的好处)。