【ORACLE】計算せずにレコード件数、最大値、最小値、NULL値の個数を確認する方法
ここではORACLEデータベースで計算せずにレコード件数、最大値、最小値、NULL値の個数を確認する方法を紹介します。
テーブルのレコード件数
表のデータ件数の確認するとき、↓のSQLのようにカウント件数をよく使います。
select count(1) from table1;
このSQLでもレコード件数は取得できますが、表のレコード件数が多くなると時間がかかります。データベースに負荷もかかります。
そういったときはDBA_TABLESを参照して、テーブルの統計情報からレコード件数を確認します。これで実テーブルに負荷をかけずにレコード件数を確認することが出来ます。
select
a.TABLE_NAME --テーブル名
,a.NUM_ROWS --件数
,a.LAST_ANALYZED --統計情報を取得した日付
from
dba_tables a
where
a.OWNER = '' --オーナー名
and a.TABLE_NAME = '' --テーブル名
;
最大値や最小値
テーブルの列の最大値や最小値は、DBA_TAB_COLUMNSを参照することで確認できます。
DBA_TAB_COLUMNSのHIGH_VALUE列に最大値、LOW_VALUE列に最小値を持っているのでSELECT文で参照します。
次のSQLでは、DBA_TAB_COLUMNSでユーザ名、テーブル名、列名を指定して、最大値と最小値を参照しています。
select
a.high_value
,a.low_value
from
dba_tab_columns a
where
a.owner = 'user1' --ユーザ名
and table_name = 'table1' --テーブル名
and column_name = 'col1' --列名
;
DBA_TAB_COLUMNSを参照する利点は2つあります。
1.素早く確認できる
MAXやMINといった集計関数は使わず、既に値が保持されているので高速に確認できます。
2.実テーブルにアクセス負荷がかからない
実テーブルをSELECTしないので、アクセス負荷を気にすることはありません。
NULL値の個数
DBA_TAB_COLUMNSのNUM_NULLS列にNULL値の個数を持っているのでSELECTして取得します。
次のSQLでは、DBA_TAB_COLUMNSでユーザ名、テーブル名、列名を指定して、NULL値の個数を取得しています。
select
a.num_nulls
from
dba_tab_columns a
where
a.owner = 'user1'
and table_name = 'table1'
and column_name = 'col1'
;
DBA_TAB_COLUMNSには他にも、NUM_DISTINCT列に一意な値の数も持っているのでぜひ使ってみてください。