LoginSignup
2
2

More than 1 year has passed since last update.

SQL Serverでレコード件数を調べる方法

Last updated at Posted at 2022-02-11

テーブルのレコード件数を調べる方法としてまず思いつくのがcount関数ですが、件数が膨大なテーブルに対して実行した場合、結果が返ってくるまでに時間がかかります。

SELECT
	count(*) as [行数]
FROM
	[テーブル名]

count

count以外でレコード数を取得する方法について調べてみました。

sp_spaceused

システム ストアド プロシージャのsp_spaceusedを使ってレコード数を取得できます。

sp_spaceused (Transact-SQL) - SQL Server | Microsoft Docs

EXEC sp_spaceused [テーブル名]

sp_spaceused

sys.partitions

システム カタログ ビューを使用して、データベース内の全テーブルの行の概数を取得できます。

sys. partitions (Transact-sql SQL) - SQL Server | Microsoft Docs

SELECT
	 obj.name as [テーブル名]
	,sum(par.rows) as [行の概数]
FROM
	sys.objects as obj
INNER JOIN
	sys.partitions as par
	ON obj.object_id = par.object_id
WHERE
	obj.type = 'U'
	and par.index_id < 2
GROUP BY
	obj.name
ORDER BY
	obj.name

rows

テーブルがパーティション分割されている場合、パーティションごとの行の概数も取得できます。

SELECT
	 obj.name as [テーブル名]
	,par.partition_number as [パーティション番号]
	,par.rows as [行の概数]
FROM
	sys.objects as obj
INNER JOIN
	sys.partitions as par
	ON obj.object_id = par.object_id
WHERE
	obj.type = 'U'
	and par.index_id < 2
ORDER BY
	 obj.name
	,par.partition_number

partitions

sys.sysindexes

sys.sysindexesを使用して行数を取得もできますが、sys.sysindexesは将来サポートされなくなるようです。

sys.sysindexes (Transact-SQL) - SQL Server | Microsoft Docs

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください

SELECT
	 obj.name as [テーブル名]
	,ind.rows as [行数]
FROM
	sys.objects as obj
INNER JOIN
	sys.sysindexes as ind
	ON obj.object_id = ind.id
WHERE
	obj.type = 'U'
	and ind.indid < 2
ORDER BY
	obj.name

sysindexes

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2