SQL Serverで各表の行数を統計する高速方法


重合関数count()で表の行数を統計できることを知っています。データベースの各テーブルの行数(DBAはこのような需要があるかもしれません)を統計する必要があるなら、count()関数を使って表ごとに動的SQL文を作成して実行しなければならないです。結果を得ることができません。以前インターネットで見ましたが、いい解決方法があります。出所を忘れました。書いてシェアしてください。
この方法は、システムテーブルによって提供されるrowsフィールドを利用する。ローソンフィールドにはインデックスのデータレベルの行数が記録されている。解決方法のコードは以下の通りです。

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は、集合インデックスまたは積み上げのみを選択し、各テーブルに少なくとも1つの山またはインデックスを集めることで、各テーブルのために1行ずつ戻ることを保証する。以下は私のAdvientureWorksデータベースでこのクエリを実行して戻ってきた部分の結果です。

Schema                  TableName              RowCount
――――――C ――――――C ―――C
Sales                      Store                     701
Production              ProductPhoto          101
Production              ProductProductPhoto  504
Sales                      StoreContact          753
Person                    Address                 19614
Production              ProductReview         4
Production              TransactionHistory   113443
Person                   AddressType            6
この方法の利点は:
1.運転速度が非常に速い。
2.ユーザーテーブルにアクセスしないため、ユーザーテーブルにロックを置かず、ユーザーテーブルの性能に影響を与えません。
3.このクエリは、サブクエリ、CTEまたはビューとして作成され、他のクエリと組み合わせて使用されてもよい。