DECLARE @RESULT_TABLE TABLE (
[TableName] VARCHAR(32),
[RowCount] INT
);
INSERT INTO @RESULT_TABLE
SELECT o.name, i.rowcnt
FROM sys.sysobjects o
JOIN sys.sysindexes i ON o.id = i.id
WHERE o.xtype = 'U' -- 使用者表
AND i.indid < 2; -- 0=Heap, 1=Clustered Index (資料層)
SELECT * FROM @RESULT_TABLE;
sys.sysindexes.rowcnt 記錄叢集索引或堆的資料列數。indid < 2 過濾出資料層 (Heap 或 Clustered Index),避免非叢集索引重複計數。| 指標 | 方法一 (游標 + 動態 COUNT(*)) | 方法二 (sysindexes 集合式) |
|---|---|---|
| CPU 時間片 | 62 | 2 |
| 邏輯讀取 | 高 (逐表掃描) | 極低 (唯有系統表) |
| 執行時間 | 秒級 | 毫秒級 |
| 準確度 | 即時精確 | 依賴統計資料更新頻率 (可能略有延遲) |

COUNT(*) (配合適當索引)。sys.dm_db_partition_stats 取代 sysindexes,準確度更高且支援分區表。

作者:Lance Zhang | 出處:https://blodfox777.cnblogs.com/ | 版權歸作者與博客園共有。