【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列に一意な値の数も持っているのでぜひ使ってみてください。