文章准備的數據庫: Atricles 表 數據量60690000條數據
ArticleID 主鍵自增列+自動建立的聚集索引,ATitle nvarchar(100) Acontent varchar(2000) CreateDate DateTime(8)
首先要說的是:select count(*) from table,那麼count(*) 和 count(主鍵) count(文本列)效率比較: 這裡是測試主代碼
dbcc freeProcCache --清空SqlCache
SET STATISTICS io ON
SET STATISTICS time ON
go
----這裡是測試語句
go
SET STATISTICS profile OFF
SET STATISTICS io OFF
SET STATISTICS time OFF
那麼我們來看看:
SELECT COUNT(*) FROM ATRICLES CPU 時間 = 1125 毫秒,占用時間 = 1140 毫秒。
SELECT COUNT(ATRICLEID) FROM ATRICLES CPU 時間 = 1093 毫秒,占用時間 = 1094 毫秒
SELECT COUNT(ATITLE) FROM ATRICLES CPU 時間 = 2266 毫秒,占用時間 = 2267 毫秒
SELECT COUNT(ACONTENT) FROM ATRICLES CPU 時間 = 2296 毫秒,占用時間 = 2303 毫秒。
Count(*) 是在處了 count(主鍵) 之外速度最快的 為什麼最快其實我也不知道 - -! 猜想可能是SQL自動做了查詢優化
那麼我們是否一定得要 COUNT(*)呢 不是的 大家看這裡:
SELECT ROWS FROM SYSINDEXES WHERE ID = OBJECT_ID('ATRICLES') AND INDID = 1
那麼我們看看它和select count(主鍵)的比較吧:
首先是Count(主鍵)
表'ATRICLES'。掃描計數 1,邏輯讀取 120368 次,物理讀取 3 次,預讀 120364 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
SQL Server 執行