2012-01-03 72 views
1

在我的一个应用程序中,我必须确定'foo_id'是否出现在表'foo_table'的'foo'列中。返回mysql的第一个结果查询

我的要求会因为我知道有一个这样的“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 (第一场比赛),这样不会不必要地触及行(因为我不需要)。

+1

确定“从foo_table选择富其中foo = 限制1; “给你58行? – 2012-01-03 06:00:17

+1

是的,至少“行”列通过“解释从foo_table中选择foo,其中foo = 限制为1;”显示58. – 2012-01-03 06:02:45

+1

没有看到'EXPLAIN'只是执行查询 – diEcho 2012-01-03 06:03:32

回答

3

解释计划将一直显示58,因为为符合你的标准,其记录的数量。

但是,限制1是你所需要的。

+0

好的。这是否意味着当我实际执行查询时,只会触及1行? – 2012-01-03 06:05:27

+0

感动不是好词,更好被提取。是的,只有一个。 – rkosegi 2012-01-03 06:10:56

+0

好吧:)但这对我有用。 – 2012-01-03 06:12:38

1

可以使用EXISTS这样:

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

SELECT被忽略,因为EXISTS只检查WHERE子句。因为避免使用*是一种好的做法,所以在这里用1代替。

这里是Documentation

+0

这仍然显示与'EXPLAIN'中的条件相匹配的相同数量的行,但优先于'LIMIT 1'来检查行是否存在。 – 2012-01-03 06:10:12

0

LIMIT 1是要走的路,所以你已经自己找到了解决办法:

SELECT 1 FROM foo_table WHERE foo = ? LIMIT 1 
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)