2012-01-03 69 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)