【发布时间】:2011-07-12 23:42:44
【问题描述】:
我使用的是 MySQL 5.1,我有一个大致如下形式的查询:
select count(*) from mytable where a = "foo" and b = "bar";
在我的程序中,它唯一检查的是这是零还是非零。如果我将其转换为:
select exists(select * from mytable where a = "foo" and b = "bar");
MySQL 是否足够聪明,可以在遇到第一个搜索时停止搜索?或者是否有其他方式与 MySQL 沟通,我的目的只是找出是否有任何记录与此匹配,而我不需要精确计数?
【问题讨论】:
-
尝试对这两个查询进行解释,您应该会得到答案。您可以发布解释输出,然后 ppl 将帮助您解码。
-
MySQL 极不可能知道优化
COUNT(*)>0! -
ANSI 标准说 EXISTS 更好,因为它不应该遍历或评估超出行的“存在”stackoverflow.com/questions/3271455/…
-
Zimbabao:两个查询的 EXPLAIN 是相同的,只是为后一种情况添加了“未使用表”条目。
-
谁能告诉我第二个语句可以返回什么?
标签: mysql performance exists