SET_INDEX_STATS プロシージャは、インデックス関連情報を設定します。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみ提供しています。
構文
DBMS_STATS.SET_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE,
avgrlen NUMBER DEFAULT NULL,
nummacroblks NUMBER DEFAULT NULL,
nummicroblks NUMBER DEFAULT NULL,
tabname VARCHAR2 DEFAULT NULL);
パラメータ説明
パラメータ |
説明 |
|---|---|
| ownname | ユーザー名。ユーザー名をNULLに設定した場合、デフォルトで現在ログインしているユーザー名が使用されます。 |
| indname | インデックス名。 |
| partname | パーティション名。 |
| numrows | インデックスの行数(パーティション)。 |
| no_invalidate | 統計情報収集時にPlan Cacheをフラッシュするかどうかを指定します。TRUEに設定すると、統計情報収集時にPlan Cacheをフラッシュしません。 |
| force | インデックス統計情報を強制的に設定し、ロック状態を無視するかどうかを指定します。デフォルトはFALSEです。TRUEに設定すると、統計情報がロックされていてもインデックス統計情報を設定します。 |
| avgrlen | インデックステーブルの平均行長(バイト単位)。 |
| nummacroblks | インデックステーブルのマクロブロック数。 |
| nummicroblks | インデックステーブルのマイクロブロック数。 |
| tabname | テーブル名。 |
例外状況
エラーコード |
説明 |
|---|---|
| OBE-20000 | 対象が存在しないか、権限が不足しています。 |
| OBE-20001 | 無効な入力値です。 |
| OBE-20005 | 対象の統計情報がロックされています。 |
使用方法
このプロシージャを呼び出すには、テーブルの所有者である必要があります。
SYSが所有するオブジェクトについては、テーブルの所有者またはSYSDBA権限が必要です。オプティマイザーは、データキャッシュを通じてインデックスや統計テーブルへのアクセスにおけるキャッシュ済みブロック数を推定します。操作の総コストには、キャッシュされていないブロックをディスクから読み取るI/Oコスト、バッファからキャッシュ済みブロックを取得するCPUコスト、およびデータを処理するCPUコストが含まれます。
TRUEおよびFALSEを値とするパラメータについては、BEGIN ... ENDブロック内でこのプロシージャを実行する必要があります。
例
ユーザー testUser01 のインデックス idx1 に関する情報を設定します。
obclient> CALL DBMS_STATS.SET_INDEX_STATS('testUser01', 'idx1', numrows=>10, avgrlen=>10,'tbl1');
Query OK, 0 rows affected
説明
OceanBase データベースのOracleモードでは、インデックスは現在のユーザーにとって一意であるため、tabname を指定する必要はありません。しかし、MySQLモードでは、インデックスが現在のユーザーにとって一意ではないため、テーブル名を明示的に指定する必要があります。