CREATE TABLE RIVUS.STAT_SAMPLE
(
ID_10 NUMBER(1,0),
ID_100 NUMBER(2,0),
NAME VARCHAR2(100),
CREATED_ON DATE DEFAULT SYSDATE
);
--
CREATE INDEX RIVUS.STAT_SAMPLE_IX10
ON RIVUS.STAT_SAMPLE (ID_10);
--
CREATE INDEX RIVUS.STAT_SAMPLE_IX100
ON RIVUS.STAT_SAMPLE (ID_100);
カラム統計は、インデックス項目だけを収集する(METHOD_OPT=>'FOR ALL INDEXED' パラメータ)。
DBMS_STATS.GATHER_TABLE_STATS の例
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
OWNNAME => 'RIVUS'
,TABNAME => 'STAT_SAMPLE'
,METHOD_OPT => 'FOR ALL INDEXED'
,CASCADE => FALSE
);
END;
/
統計収集の確認(LAST_ANALYZED 日付が格納されていることを確認)。
SELECT TABLE_NAME NAME, LAST_ANALYZED
FROM USER_TABLES
WHERE TABLE_NAME = 'STAT_SAMPLE'UNIONSELECT INDEX_NAME NAME, LAST_ANALYZED
FROM USER_INDEXES
WHERE INDEX_NAME IN ('STAT_SAMPLE_IX10','STAT_SAMPLE_IX100');
BEGIN
-- INDEX IX10
DBMS_STATS.GATHER_INDEX_STATS(
OWNNAME => 'RIVUS',
INDNAME => 'STAT_SAMPLE_IX10'
);
-- INDEX IX100
DBMS_STATS.GATHER_INDEX_STATS(
OWNNAME => 'RIVUS',
INDNAME => 'STAT_SAMPLE_IX100'
);
END;
/
インデックス統計収集の確認(LAST_ANALYZED 日付が格納されていることを確認)。
SELECT TABLE_NAME NAME, LAST_ANALYZED
FROM USER_TABLES
WHERE TABLE_NAME = 'STAT_SAMPLE'UNIONSELECT INDEX_NAME NAME, LAST_ANALYZED
FROM USER_INDEXES
WHERE INDEX_NAME IN ('STAT_SAMPLE_IX10','STAT_SAMPLE_IX100');
カラム統計の収集
テーブル統計の取得 にて、METHOD_OPT => 'FOR ALL COLUMNS' で統計収集していれば不要のはずである内容
カラム統計情報の収集がインデックス項目だけであることを確認。
SELECT COLUMN_NAME, LAST_ANALYZED
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'STAT_SAMPLE';