一種快速統計SQL Server每個表行數的方法


我們都知道用聚合函數count()可以統計表的行數。如果需要統計數據庫每個表各自的行數(DBA可能有這種需求),用count()函數就必須為每個表生成一個動態SQL語句並執行,才能得到結果。以前在互聯網上看到有一種很好的解決方法,忘記出處了,寫下來分享一下。

該方法利用了sysindexes 系統表提供的rows字段。rows字段記錄了索引的數據級的行數。解決方法的代碼如下:

1
2
3
select  schema_name(t.schema_id) as  [ Schema ], t. name  as  TableName,i. rows  as  [RowCount]
from  sys.tables as  t, sysindexes as  i
where  t.object_id = i.id and  i.indid <=1

該方法連接了sys.tables視圖,從中找出表名和schema_id,再通過schema_name函數獲取表的架構名。篩選條件i.indid <=1 只選聚集索引或者堆,每個表至少有一個堆或者聚集索引,從而保證為每個表返回一行。以下是在我的AdventureWorks數據庫中運行該查詢返回的部分結果:

Schema                  TableName              RowCount
-------------------- -------------------- -----------
Sales                      Store                     701
Production              ProductPhoto          101
Production              ProductProductPhoto  504
Sales                      StoreContact          753
Person                    Address                 19614
Production              ProductReview         4
Production              TransactionHistory   113443
Person                   AddressType            6

 

該方法的優點有:

    • 運行速度非常快。
    • 由於不訪問用戶表,不會在用戶表上放置鎖,不會影響用戶表的性能。
    • 可以將該查詢寫成子查詢、CTE或者視圖,與其它查詢結合使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM