SET_TABLE_STATS プロシージャは、テーブルレベルの基本的な統計情報を設定するために使用されます。
構文
DBMS_STATS.SET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numblks NUMBER DEFAULT NULL,
avgrlen NUMBER DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| ownname | ユーザー名。ユーザー名を NULL に設定した場合、現在ログインしているユーザー名がデフォルトで使用されます。 |
| tabname | テーブルの名前。 |
| partname | 統計情報を格納するテーブルパーティションの名前。 テーブルがパーティション化されており、かつ partname が NULL の場合、統計情報はグローバルなテーブルレベルに格納されます。 |
| numrows | テーブル全体の総行数。 |
| numblks | テーブル全体で使用されるブロック数。 |
| avgrlen | 列単位の平均長(バイト単位)。 |
| no_invalidate | 統計情報の収集時にPlan Cacheをフラッシュするかどうか。TRUE に設定すると、統計情報の収集時にPlan Cacheをフラッシュしません。 |
| force | ロック状態を無視して強制的に統計情報を収集するかどうか。デフォルトは FALSE です。TRUE に設定すると、統計情報がロックされていても収集されます。 |
異常
| エラーコード | 説明 |
|---|---|
| HY000 |
|
使用方法
このプロシージャを呼び出すには、テーブルの所有者である必要があります。
SYSが所有するオブジェクトを使用する場合は、テーブルの所有者またはSYSDBA権限を持つユーザーである必要があります。オプティマイザーは、キャッシュデータを使用してインデックスまたは統計テーブルへのアクセスに必要なキャッシュブロック数を推定します。操作の総コストには、ディスクからキャッシュされていないブロックを読み取るI/Oコスト、バッファからキャッシュブロックを取得するCPUコスト、およびデータを処理するCPUコストが含まれます。
例
ユーザー testUser01 のテーブル tbl1 の総行数を1万行に設定します。
obclient> CALL DBMS_STATS.SET_TABLE_STATS('testUser01', 'tbl1', numrows=>10000, force=>FALSE, no_invalidate=>FALSE);
Query OK, 0 rows affected