2011-11-26 46 views
5

我只需要知道查询是否返回记录。最快的查询,看它是否至少返回一行

我当然可以这样做:

SELECT COUNT(*) FROM tbl WHERE conds; 

但这返回行(当然)的确切数量,而我不需要这方面的开销。

所以我想这个查询:

SELECT COUNT(*) FROM (SELECT id FROM tbl WHERE conds LIMIT 1) as t1 

限制内部查询到1

这样快?或者考虑我正在做一个子查询,它取消了LIMIT 1的好处?

注:大家问theirself,我不能申请LIMIT 1到第一查询,因为它好好尝试一下工作

回答

7

内,选择在第二个查询是多余的。
如果你只是要检查的,至少一排: -

SELECT 1 FROM tbl // return 1 
WHERE conds  // depends on your index and query 
ORDER BY NULL  // avoid file-sort 
LIMIT 1;   // minimum row 
+0

然后我n调用一个'mysql_num_rows($ result)'? (假设我正在使用mysql lib) – dynamic

+0

是的(15个字符去)... – ajreal

+0

ORDER BY NULL必需?没有提供它不会是一样的? – dynamic

3

为什么不干脆:

SELECT 1 FROM tbl WHERE conds LIMIT 1 
0

你可以这样做:

SELECT 1 WHERE EXISTS(SELECT id FROM tbl WHERE CONDITION) 

或者类似的东西:

SELECT 1 WHERE EXISTS (SELECT id FROM tbl WHERE id IN(1000, 1001)) 
+0

'EXISTS(...)'比'SELECT ... LIMIT 1'更有效吗? –

相关问题