可能重複:
COUNT(id) vs. COUNT(*) in MySQLCOUNT(fld)比COUNT(*)更快嗎?
短暫而簡單:在MySQL,將一個SELECT COUNT(fld) AS count FROM tbl
比SELECT COUNT(*) AS count FROM tbl
更快,因爲我明白*
是在MySQL中的 「所有」 選擇。
是否COUNT(*)
選擇所有行來計算計數,並因此使像SELECT(id)
這樣的查詢更便宜?或者它並不重要?
可能重複:
COUNT(id) vs. COUNT(*) in MySQLCOUNT(fld)比COUNT(*)更快嗎?
短暫而簡單:在MySQL,將一個SELECT COUNT(fld) AS count FROM tbl
比SELECT COUNT(*) AS count FROM tbl
更快,因爲我明白*
是在MySQL中的 「所有」 選擇。
是否COUNT(*)
選擇所有行來計算計數,並因此使像SELECT(id)
這樣的查詢更便宜?或者它並不重要?
不,count(*)
比count(fld)
更快(在完全不同的情況下)。
count(fld)
必須考慮該字段中的數據,因爲它計算所有非空值。
count(*)
只記錄記錄的數量,所以它不需要訪問數據。
*
是在MySQL
「全」選擇,當您選擇列,其中*
是整個列列表中的快捷鍵是真的。
SELECT *
變成SELECT foo, bar
。
但是COUNT(*)
未擴展爲COUNT(foo,bar)
,這在SQL中是無意義的。 COUNT
是一個聚合函數,通常每個選定行需要一個值。
SELECT COUNT(*) AS count FROM tbl
上面的查詢甚至沒有計算行,假設沒有WHERE
子句,它直接從表緩存中讀取。指定一個字段而不是*
會強制SQL實際對行進行計數,因此當沒有WHERE
子句時使用*
會更快。
可能的重複:http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – 2010-11-18 14:56:57
http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – bcmcfc 2010-11-18 14:57:04