0

次の2つのクエリ(DBAとして実行)は、2つの異なる行数を生成します。

select table_name, num_rows from all_tables where owner = 'JIRA' and table_name = 'JIRAISSUE';

select count(*) from JIRA.JIRAISSUE;

2番目のクエリが正しい値を返すことはわかっています。

  • なぜこれが起こるのですか?保留中のトランザクションがあると思いますが、確かではありません。(コミットされていない作業)
  • ALL_TABSによって返される数値を「更新」または「再生成」する特定のSQLコマンドはありますか?

前もって感謝します。

4

3 に答える 3

4

NUM_ROWS列は、テーブルの統計が更新されたときに(のみ)更新される推定値にすぎません。

また、値の直後でも正しい行数が反映さない場合があります(ただし、推定値にすぎないため、保証されません) 。DBMS_STATS.GATHER_TABLE_STATS()

于 2013-01-16T14:07:13.003 に答える
1

正確なカウントを返したい場合はall_tables、次のように分析する必要があります。

analyze table JIRAISSUE compute statistics

そうすれば、上記のステートメントを実行すると、正しい結果が返されます。ただし、次の挿入では、再分析するまで正しくありません。

于 2013-01-16T14:06:13.107 に答える
0

アナライザーを実行せずに、以下のクエリで正しい結果が得られます。

select
table_name,
  to_number(
    extractvalue(
      xmltype(
   dbms_xmlgen.getxml('select count(*) c from '||table_name))
      ,'/ROWSET/ROW/C')) row_count
from ALL_TABLES ;
于 2013-05-18T03:13:55.317 に答える