EXISTS比COUNT(*)> 0更有效吗?

Ken*_*Ken 28 mysql performance exists

我正在使用MySQL 5.1,我的查询大致是这样的形式:

select count(*) from mytable where a = "foo" and b = "bar";
Run Code Online (Sandbox Code Playgroud)

在我的程序中,它唯一检查的是零或非零.如果我将其转换为:

select exists(select * from mytable where a = "foo" and b = "bar");
Run Code Online (Sandbox Code Playgroud)

MySQL是否足够聪明,可以在第一次搜索时停止搜索?或者是否有其他方式与MySQL通信我的意图只是找出是否有任何记录符合这一点,我不需要一个确切的计数?

Tho*_*mas 31

是的,当使用Exists函数返回行时,MySQL(实际上我所知的所有数据库系统)将停止处理.

您可以在MySQL文档中阅读更多内容: 如果子查询返回任何行,则EXISTS子查询为TRUE.


lin*_*ogl 12

我已经运行了1000个查询的测试.SELECT EXISTS比...快25%左右SELECT COUNT.添加limit 1SELECT COUNT没有任何区别.

  • 将"limit 1"添加到"select count"不会有任何区别,因为`select count`会返回一行.:-) (16认同)

小智 5

这或许也是一种做法。

select 1 from mytable where a = "foo" and b = "bar" limit 1;
Run Code Online (Sandbox Code Playgroud)

这不会遍历所有满足 where 条件的记录,而是在第一次“命中”后返回“1”。缺点是您需要检查结果,因为返回的记录集可能为空。