(1)select count(*) 和select count(1) 數據庫
這要看DBMS如何處理了,
MSSql是這樣定義的:
COUNT(*):返回記錄總數,不會讀取行上的任何信息,
COUNT(1):返回記錄總數,可是會在每一行讀取1
MySql,只要不是讀取行的全部列,仍是優先使用COUNT(*)。緩存
總之:結論不一。偏向於:Count(*) 數據量小時候用快,count(1)數據量上百萬級別速度快。測試
(2) select * from 和 select 字段名 .net
因爲數據庫引擎的不一樣結果也會不同,因此測試了 MyISAM 和 InnoDB 兩種引擎,後面是測試過程的輸出,結論以下:
1. InnoDB 對於各類形式的 count 均同樣,須要全表掃描進行計算,對於非主鍵的列進行計算結果反而更快(多是緩存的影響?)
2. MyISAM 對於非主鍵的列進行 count 會慢一些,其它的形式均很快。對於 count(*) 確定是直接讀取數據庫的「行數」屬性,其它的也是 0 秒的形式不大清楚其實際計算過程select
3. 對於不一樣的數據庫系統和不一樣的引擎可能實現上不一樣,因此此題目所說的比較須要基於不一樣的環境進行數據
http://bbs.csdn.net/topics/370167999top
這個只能說跟數據庫的實現有關係。
在過去低版本的實現當中,count(1)可能要快於count(*), 可是高版本的實現裏頭,二者可能徹底同樣。
co