2011-11-26 53 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'更有效嗎? –

相關問題