テーブルの統計情報作成
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => オーナー名
, TABNAME => テーブル名
, METHOD_OPT => 'FOR ALL INDEXED'
, CASCADE => TRUE or FALSE -- インデックス情報も同時に作成する場合は「TRUE」作成しない場合は「FALSE」
);
END;
使用例:オーナー名がSAMPLEのFOOテーブルの統計情報を作成する場合(インデックス情報も同時に作成する)
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'SAMPLE'
, TABNAME => 'FOO'
, METHOD_OPT => 'FOR ALL INDEXED'
, CASCADE => TRUE
);
END;
テーブルの統計情報確認
SELECT
TABLE_NAME NAME
, LAST_ANALYZED
FROM
USER_TABLES
WHERE
TABLE_NAME = テーブル名
使用例:FOOテーブルの統計情報があるか確認する(LAST_ANALYZEDがNULLの場合は統計情報が存在しない)
SELECT
TABLE_NAME NAME
, LAST_ANALYZED
FROM
USER_TABLES
WHERE
TABLE_NAME = 'FOO'
インデックスの統計情報確認
SELECT
INDEX_NAME NAME
, LAST_ANALYZED
FROM
USER_INDEXES
WHERE
INDEX_NAME IN (インデックス名1, インデックス名2)
使用例:IDX_FOO_PKとIDX_FOO_1のインデックス情報を確認する場合
SELECT
INDEX_NAME NAME
, LAST_ANALYZED
FROM
USER_INDEXES
WHERE
INDEX_NAME IN ('IDX_FOO_PK', 'IDX_FOO_1')
テーブルの統計情報削除
BEGIN
DBMS_STATS.DELETE_TABLE_STATS(オーナー名, テーブル名);
END;
使用例:オーナー名がSAMPLEのFOOテーブルの統計情報を削除する場合
BEGIN
DBMS_STATS.DELETE_TABLE_STATS('SAMPLE', 'FOO');
END;