LoginSignup
16
18

More than 5 years have passed since last update.

Oracleの統計情報

Last updated at Posted at 2014-07-23

テーブルの統計情報作成

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;
16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18