提高MSSQL資料庫效能(1)對比count(*) 和 替代count(*)
文章準備的資料庫: 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 執行時間: CPU 時間 = 2282 毫秒,佔用時間 = 21334 毫秒。
其次是 from SYSINDEXES
表 'SYSINDEXES'。掃描計數 1,邏輯讀取 2 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0次,lob 預讀 0 次。
SQL Server 執行時間: CPU 時間 = 0 毫秒,佔用時間 = 1 毫秒。
SYSINDEXES 系統表 所有的表 行集 索引資訊 存放在這個表中
ID =OBJECT_ID('ATRICLES') ID的意思是 索引所屬的表ID
INDID 表示在聚集索引上查詢 因為主鍵在建立的時候已經自動的建立了聚集索引
ROWS 基於 indid = 0 和 indid = 1 的資料級行計數,如果 indid >1,則該值包含重複的計數。
這篇文章想說的是: 在分頁情況下 可以考慮使用上面語句查詢資料行 AND count(*) 並不是低效率的 感謝下面朋友指教
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-630936/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- count (*) 和 count (1) 和 count (列名) 區別
- count(*) 和 count(1)和count(列名)區別
- mysql中count(1)與count(*)比較MySql
- count(*)、count(1)和count(列名)的區別
- 圖解MySQL:count(*) 、count(1) 、count(主鍵欄位)、count(欄位)哪個效能最好?圖解MySql
- count(0),count(1),count(*)總結與count(column)
- count(1),count(*),count(列)的區別
- 【優化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主鍵)、COUNT(ROWID)等優化
- SQL Server中count(*)和Count(1)的區別SQLServer
- select count(*)和select count(1)的區別
- Ask Hoegh(4)——select count(*)和select count(1)、count(column)有區別嗎?
- 提高count查詢速度
- 【MySQL】效能優化之 count(*) VS count(col)MySql優化
- count(*) 和count(column)之區別
- MySQL的COUNT語句--count(*)、 count(常量)、 count(列名)MySql
- 百萬資料 mysql count(*)優化MySql優化
- ORACLE的count與空值比較Oracle
- 安裝mysql遇到ERROR: 1136 Column count doesn't match value count at row 1MySqlError
- MySQL:count(*) count(欄位) 實現上區別MySql
- count(*) 優化優化
- count(*)優化優化
- 理解exists count
- 大資料下的Distinct Count(二):Bitmap篇大資料
- pymysql.err.OperationalError: (1136, “Column count doesn‘t match value count at row 1“)報錯反省。MySqlError
- ORM框架和資料庫對系統效能影響的比較ORM框架資料庫
- 優化select count(*) from t1優化
- 還在用SELECT COUNT統計資料庫表的行數?Out了資料庫
- sum()over()和count()over()分析函式函式
- 7.36 BITMAP_COUNT
- count(*)小優化優化
- std::count 函式函式
- 【SQL】Oracle資料庫變更後sql效能對比SQLOracle資料庫
- Count 1 in Binary(二進位制中有多少個1)
- 提高MySQL 資料庫效能的思路(轉)MySql資料庫
- High Version Count Issues(SQL高Version Count) (文件 ID 296377.1)SQL
- 提高sql效能資源(1)SQL
- 7.13 APPROX_COUNTAPP
- mysql count()的使用解析MySql