向LIMIT
查询添加EXISTS
是否有任何性能优势,或者MySQL会自行应用限制吗?
示例:
IF EXISTS (
SELECT 1
FROM my_table
LIMIT 1 -- can this improve performance?
)
THEN ... END IF;
答案 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)。如果记录不是太多,那么你将看不到任何性能改进,但如果你的表有太多记录,那么你会看到性能改进,但这也取决于在很多因素上,你在列中有索引(如果你这样做,那么你也会得到覆盖索引的好处)。