只返回mysql Query的第一个结果

时间:2012-01-03 05:56:58

标签: mysql database limit

在我的某个应用程序中,我必须确定表“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(第一个匹配),这样就不会不必要地触摸行(因为我不需要它)。

4 个答案:

答案 0 :(得分:7)

解释计划将始终显示58,因为是符合您条件的记录数。

然而,LIMIT 1就是你所需要的。

答案 1 :(得分:2)

您可以使用EXISTS

SELECT EXISTS(SELECT 1 FROM foo_table WHERE foo=<foo_id>)

SELECT被忽略,因为EXISTS只检查WHERE子句。由于最好避免使用*,因此在1处将其替换。

这是Documentation

答案 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)