SQL Serverで大量レコードの件数を取得する

要点

システム・ストアド・プロシージャ「sp_spaceused」を利用します。

EXEC sp_spaceused [テーブル名];

 

詳細(失敗の経緯)

製造業IoT担当の栫です。

IoTの取り掛かりで、自社資源を間借りしてデータ収集するとして、センサーデータをRDBに登録すると、思いのほか、レコードがかさみます。

(かさみました。。。)

システム検証環境に、SQL Serverを利用したとき、大量データ件数(21億件越え)を確認したときの備忘です。

 

とあるテーブルの件数の確認に、システムデータベースから、データ件数を確認しました。

SELECT A.name AS テーブル名, B.rows AS 総件数
FROM sys.objects AS A
JOIN sys.sysindexes AS B
ON A.object_id = B.id AND B.indid < 2
WHERE A.type = ‘U’
ORDER BY A.name

確認のため、テーブルを参照してカウントしてみたら、、、、

SELECT count(1) FROM [調べたいテーブル]

で、オーバーフローしました。

(センサーデータの蓄積はRDBは向かないなという反省は別にして。。。)

 

。。。。とすると、「count(1)」がintの最大値を超えたことになるので、

本当は、2^31-1 (2,147,483,647)≒21億件を超えています。

 

なので、システムデータベースの件数は、実態からかい離することになります。

 

下のように「count(1)」をCASTすれば、取得できなくはないですが、15分間待っても結果が返ってきません。

 

select CAST(count(1) AS BIGINT) from [調べたいテーブル]

 

そこで、システム・ストアド・プロシージャ「sp_spaceused」を利用することで、取得できました。

 

EXEC sp_spaceused [テーブル名];

 

以上、備忘録でした!

リソースやサービスなど、ありものを駆使して、楽々IoTライフを送りましょう。

 

今年も、よろしくお願いします!