2016-10-06 11 views
2

oracleプロダクション・データベースの各表の行数を確認します。だから、私は私のテスト目的のために2つのクエリを実行しています。oracleの類似の問合せでRowcountが一致しません

1)select owner, table_name, num_rows from all_tables where OWNER = 'XYZ' and TABLE_NAME = 'Application' order by table_name asc;

2)select count(*) from XYZ.Application

だから、最初のクエリのために、私は、最初のクエリのための829として結果を取得しています。一方、2番目のクエリでは836です。だから、この矛盾を特定するために何を確認する必要があるのか​​誰にでも教えてください。

お返事ありがとうございました。 私は、どのようにして単一のQuery内のすべてのテーブルの行の正確な数を得ることができますか?

答えて

4

ALL_TABLES.NUM_ROWSは、Oracleが統計として収集した数値です。推定値かもしれません。または、それは正確かもしれないが、時代遅れであるかもしれません。

あなたはそれを見て、現在テーブルにある正確な行数を見ているとは限りません。

2番目のクエリは、現在テーブルにある正確な行数を返します。

1

all_tablesからの最初のクエリは、統計に基づいていますが、これは必ずしも最新ではなく、完全に正確ではありません。

実際には、テーブルデータ自体をスキャンし、行を数えます。常に正確です。

1

LAST_ANALYZED列のALL_TABLESを参照してください。それは統計が収集された最後の時間です。テーブルの最新の状態を反映していない可能性があります。

0

NUM_ROWSは、コミットされたトランザクションのみを反映します。一方、COUNT(*)には、COUNT(*)クエリを実行するセッションからのコミットされていないトランザクションが含まれます。 7行だけを挿入しましたが、まだコミットしていませんか?

関連する問題