統計情報の設定機能とは、テーブルレベルおよび列レベルの基本統計情報を明示的に設定することを指します。
説明
現在、列レベルのヒストグラム情報の設定はまだサポートされていません。
OceanBaseデータベースでは、現在以下の3つの方法で統計情報を設定できます:
- ステートメントプロシージャ
set_table_stats使用して、テーブルレベルの基本統計情報を設定します。 - ステートメントプロシージャ
set_column_stats使用して、列レベルの基本統計情報を設定します。 - ステートメントプロシージャ
set_index_stats使用して、インデックス統計情報を設定します。
ステートメントプロシージャの定義
OceanBaseはOracleモードとMySQLモードの両方をサポートしており、使用方法は基本的に同じです。特に断りがない限り、デフォルトで使用方法は一致するものとします。
具体的なステートメントプロシージャの定義は以下のとおりです:
PROCEDURE set_table_stats (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numblks NUMBER DEFAULT NULL,
avgrlen NUMBER DEFAULT NULL,
flags NUMBER DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
cachedblk NUMBER DEFAULT NULL,
cachehit NUMBER DEFAULT NULL,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE set_column_stats (
ownname VARCHAR2,
tabname VARCHAR2,
colname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
distcnt NUMBER DEFAULT NULL,
density NUMBER DEFAULT NULL,
nullcnt NUMBER DEFAULT NULL,
epc NUMBER DEFAULT NULL,
minval RAW DEFAULT NULL,
maxval RAW DEFAULT NULL,
bkvals NUMARRAY DEFAULT NULL,
novals NUMARRAY DEFAULT NULL,
chvals CHARARRAY DEFAULT NULL,
eavals RAWARRAY DEFAULT NULL,
rpcnts NUMARRAY DEFAULT NULL,
eavs NUMBER DEFAULT NULL,
avgclen NUMBER DEFAULT NULL,
flags NUMBER DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
force BOOLEAN DEFAULT FALSE
);
PROCEDURE set_index_stats (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numlblks NUMBER DEFAULT NULL,
numdist NUMBER DEFAULT NULL,
avglblk NUMBER DEFAULT NULL,
avgdblk NUMBER DEFAULT NULL,
clstfct NUMBER DEFAULT NULL,
indlevel NUMBER DEFAULT NULL,
flags NUMBER DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT FALSE,
guessq NUMBER DEFAULT NULL,
cachedblk NUMBER DEFAULT NULL,
cachehit NUMBER DEFAULT NULL,
force BOOLEAN DEFAULT FALSE,
avgrlen NUMBER DEFAULT NULL,
nummacroblks NUMBER DEFAULT NULL,
nummicroblks NUMBER DEFAULT NULL
);
パラメータの説明は以下の表を参照してください。
| パラメータ | 説明 |
|---|---|
| ownname |
|
| tabname | テーブル名。 |
| tabname | インデックス名。 |
| partname | パーティション名。 |
| colname | 列名。 |
| numrows | テーブル全体の総行数。 |
| avgrlen | テーブル全体の平均行数。 |
| distcnt | 列レベルのNDV値。 |
| density | 列レベルの疎密度。 |
| nullcnt | 列レベルのNULL値の個数。 |
| avgclen | 列レベルの平均長さ。 |
| force | ロック状態を無視して強制的に削除するかどうか。デフォルトはFALSEです。 |
例
統計情報設定機能の例は以下のとおりです:
ユーザー
user1のテーブルtbl1の総行数を1万行に設定します。CALL DBMS_STATS.SET_TABLE_STATS('user1', 'tbl1', numrows=>10000);ユーザー
user1のテーブルtbl1のcol1列のNDVを10、NULL値の数を10に設定します。CALL DBMS_STATS.SET_COLUMN_STATS('user1', 'tbl1', 'col1', distcnt=>10, nullcnt=>10);ユーザー
user1のインデックスidx1の関連情報を設定します。CALL DBMS_STATS.SET_INDEX_STATS('user1', 'idx1', numrows=>10, avgrlen=>10);
関連ドキュメント
MySQLモードで統計情報を設定するストアドプロシージャのドキュメント:
Oracleモードで統計情報を設定するストアドプロシージャのドキュメント: