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

SQL Server 高效獲取資料表行數:sysindexes 替代 COUNT(*)

     編輯:關於SqlServer

為什麼不直接用 COUNT(*)?

SELECT COUNT(*) FROM large_table 會觸發全表掃描或索引掃描,在百萬行以上大表上耗時顯著,且佔用大量邏輯讀與 CPU。若僅需快速獲取近似行數(或精確行數且可接受極小延遲),系統目錄視圖是更佳選擇。

sysindexes 方案

SELECT rows
FROM sysindexes
WHERE id = OBJECT_ID('your_table')
  AND indid IN (0, 1);  -- 0=堆表, 1=叢集索引

關鍵點

  • rows 欄位由 SQL Server 自動維護,反映資料表當前行數
  • indid=0(無叢集索引)或 indid=1(有叢集索引)對應資料列本身
  • 查詢極快,僅讀取系統目錄頁面,無用戶資料頁 I/O

現代替代方案(SQL Server 2005+)

-- 動態管理視圖,更標準、資訊更豐富
SELECT SUM(p.rows)
FROM sys.partitions p
WHERE p.object_id = OBJECT_ID('your_table')
  AND p.index_id IN (0, 1);

適用場景與限制

場景建議
大表快速估算行數✅ sysindexes / sys.partitions
精確行數且允許極短延遲✅ 系統目錄(統計資訊同步後)
交易一致性精確計數❌ 必須使用 COUNT(*) 配合適當隔離級別
含過濾條件的計數❌ 僅能獲取全表行數

維護提示

統計資訊過期會導致 rows 偏差。定期執行 UPDATE STATISTICS 或啟用 AUTO_UPDATE_STATISTICS 保持準確。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved