2010-11-18 111 views
2

可能重複:
COUNT(id) vs. COUNT(*) in MySQLCOUNT(fld)比COUNT(*)更快嗎?

短暫而簡單:在MySQL,將一個SELECT COUNT(fld) AS count FROM tblSELECT COUNT(*) AS count FROM tbl更快,因爲我明白*是在MySQL中的 「所有」 選擇。

是否COUNT(*)選擇所有行來計算計數,並因此使像SELECT(id)這樣的查詢更便宜?或者它並不重要?

+2

可能的重複:http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – 2010-11-18 14:56:57

+1

http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – bcmcfc 2010-11-18 14:57:04

回答

3

不,count(*)count(fld)更快(在完全不同的情況下)。

count(fld)必須考慮該字段中的數據,因爲它計算所有非空值。

count(*)只記錄記錄的數量,所以它不需要訪問數據。

0

*是在MySQL

「全」選擇,當您選擇列,其中*是整個列列表中的快捷鍵是真的。

SELECT *變成SELECT foo, bar

但是COUNT(*)未擴展爲COUNT(foo,bar),這在SQL中是無意義的。 COUNT是一個聚合函數,通常每個選定行需要一個值。

1
SELECT COUNT(*) AS count FROM tbl 

上面的查詢甚至沒有計算行,假設沒有WHERE子句,它直接從表緩存中讀取。指定一個字段而不是*會強制SQL實際對行進行計數,因此當沒有WHERE子句時使用*會更快。