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

MSSQL 解決 COUNT(*) 統計資料表筆數延遲問題

     編輯:關於SqlServer

現象:sysindexes.rows 與實際筆數不一致

為避免 COUNT(*) 全表掃描,常見優化建議查詢 sysindexes.rows:

SELECT rows FROM sysindexes
WHERE id = OBJECT_ID('表名') AND indid < 2;

但實測發現回傳值與實際筆數不一致:

筆數對比截圖

原因:sysindexes 為延遲更新,統計資料非即時。

解決方案:DBCC UPDATEUSAGE 強制同步

DBCC UPDATEUSAGE(0, '表名') WITH COUNT_ROWS;
  • 0:目前資料庫 ID(或直接寫資料庫名)。
  • 表名:需校正的目標表。
  • COUNT_ROWS:指定用實際列數更新 row count 欄位。

執行結果示例

DBCC UPDATEUSAGE: 已更新表 orders 的 sysindexes 行(索引 'PK_PND_ORDERS',分區 1):
行計數: 已從 7775 行更改為 7849 行。
DBCC 執行完畢。

執行後 sysindexes.rows 即與實際筆數一致。

補充說明

  • DBCC UPDATEUSAGE 亦可修正頁面計數錯誤,WITH COUNT_ROWS 僅更新列數,效能較佳。
  • 大型資料庫執行可能耗時,建議維護窗口執行。
  • 若需即時精確筆數且表極大,仍建議 COUNT(*) 配合適當索引,或使用 sys.dm_db_partition_stats(SQL 2005+)查詢 row_count,準確度較 sysindexes 高。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved