首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 中 COUNT(*) 與 COUNT(1) 效能差異深度解析

     編輯:Oracle 資料庫基礎

結論先行

兩者效能基本相同。經實測與官方文件驗證,優化器會自動將 COUNT(*) 轉換為最適合的欄位計數,無需手寫 COUNT(1) 或 COUNT(pk)。

實測情境分析

情境表現
資料量 < 1 萬,已收集統計資訊COUNT(1) 略快,差異極微
資料量 > 1 萬,已收集統計資訊COUNT(*) 略快或持平
資料量 > 10 萬COUNT(1) 略快(極小差距)
無主鍵COUNT(1) 較快
有主鍵/聯合主鍵COUNT(主鍵) 最快,但 COUNT(*) 自動優化至同等
單欄位表COUNT(*) 最快

關鍵技術細節

  • 執行計劃完全一致:皆為 INDEX FAST FULL SCAN 或 FULL TABLE SCAN
  • COUNT(*) 計算所有行(含 NULL);COUNT(col) 忽略 NULL 值
  • 範例:ID=1, DD='e' / ID=2, DD=NULL → COUNT(*)=2,COUNT(DD)=1

專家觀點(Tom Kyte)

「COUNT(*) 與 COUNT(1) 不相上下,優化器處理邏輯相同。建議使用 COUNT(*),語意更清晰。」

真正的調優焦點

不要糾結 COUNT(*) vs COUNT(1),應關注:

  • 降低 Consistent Gets(邏輯讀)
  • 降低 Physical Reads(實體讀)
  • 建立適當索引、分區、物化視圖
  • 避免全表掃描大表
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved