在我的某个应用程序中,我必须确定表“foo_id
”的“foo
”列中是否显示“foo_table
”。
只要我知道有一个“foo_id
”出现,我的要求就会得到满足。
现在,我的问题是如何将此限制为第一场比赛。
当我针对mySql EXPLAIN
检查这些查询时:
- select count(foo) from foo_table where foo=<foo_id>;
- select foo from foo_table where foo=<foo_id> limit 1;
在这两种情况下,行数为58。 在mySql中是否有一种方法可以将行数限制为1(第一个匹配),这样就不会不必要地触摸行(因为我不需要它)。
答案 0 :(得分:7)
解释计划将始终显示58,因为是符合您条件的记录数。
然而,LIMIT 1就是你所需要的。
答案 1 :(得分:2)
您可以使用EXISTS
:
SELECT EXISTS(SELECT 1 FROM foo_table WHERE foo=<foo_id>)
。
SELECT被忽略,因为EXISTS只检查WHERE子句。由于最好避免使用*
,因此在1
处将其替换。
答案 2 :(得分:0)
LIMIT 1
是要走的路,所以你已经找到了解决方案:
SELECT 1 FROM foo_table WHERE foo = ? LIMIT 1
答案 3 :(得分:0)
以下explain
MySQL语句显示总行数而不是您在限制中指定的行:
explain select foo from foo_table where foo=<foo_id> limit 1
<强>输出强>
+----+-------------+-------------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | foo_table | ALL | NULL | NULL | NULL | NULL | 58 | |
+----+-------------+-------------+------+---------------+------+---------+------+------+-------+
1 row in set (0.00 sec)