本日の作業中で、データベースでのすべてのテーブル名称、レコード数及び各テーブルの使用容量を確認することがあった。
グーグルしたら、沢山の記事があった。しかし、皆は似ている記事を掲載している(笑)。
検索結果の3ページまで閲覧したが、結局、みんなは同一SQL文となる。
残念ながら、そのSQLは効率がかなり低く、SQLを実施したら、なんと3分以上がかかってしまい(テーブルデータ量が多いから)。
ここでは、かなり軽いSQL文を掲載します。
僕が実験した結果は、SQL処理時間は元の1/200ぐらい短くした。
では、データベースでのすべてのテーブル名称、レコード数及び各テーブルの使用容量を確認するSQL文で。コピペで実施してみてくださいね。
SELECT
a.table_name --テーブル名称
,a.num_rows --テーブルのレコード数
, b.MB -- テーブルの利用容量
FROM user_tables a -- 全てのテーブル
, (Select Segment_Name,Sum(bytes)/1024/1024 MB From user_segments Group By Segment_Name) b --テーブル名称&容量の集合
WHERE a.table_name = b.Segment_Name
ORDER BY a.num_rows desc, b.MB desc;
上記のコードはあまり考えずに作ったので、もっとカスタマイズすれば、より効率がよいSQL文を作れるかも。
(追記)SQL実施結果:
最後、他記事でのSQL文も提示します。
SELECT
distinct table_name,
TO_NUMBER(
extractvalue(
xmltype(
dbms_xmlgen.getxml('SELECT COUNT(*) c FROM '||table_name))
,'/ROWSET/ROW/C')) rec_ccount,
trunc(bytes/1024/1024,0) tablesize
FROM user_tables
join user_segments on user_segments.segment_name = user_tables.table_name
order by rec_ccount desc;
以上、オラクル全てのテーブル名、レコード数及び各テーブル容量を確認の方法でした。
WEBエンジニアを募集しています!
♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。
コメントする