SQL數據庫查詢優化的問題

(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

相關文章
相關標籤/搜索