MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  INFORMATION_SCHEMA テーブル  /  INFORMATION_SCHEMA STATISTICS テーブル

26.34 INFORMATION_SCHEMA STATISTICS テーブル

STATISTICS テーブルは、テーブルインデックスの情報を提供します。

テーブル統計を表す STATISTICS のカラムには、キャッシュされた値が保持されます。 information_schema_stats_expiry システム変数は、キャッシュされたテーブルの統計が期限切れになるまでの期間を定義します。 デフォルトは 86400 秒 (24 時間) です。 キャッシュされた統計がない場合、または統計が期限切れになっている場合は、テーブル統計カラムのクエリー時にストレージエンジンから統計が取得されます。 特定のテーブルのキャッシュされた値をいつでも更新するには、ANALYZE TABLE を使用します。 常に最新の統計をストレージエンジンから直接取得するには、information_schema_stats_expiry=0 を設定します。 詳細は、セクション8.2.3「INFORMATION_SCHEMA クエリーの最適化」を参照してください。

注記

innodb_read_only システム変数が有効になっている場合、InnoDB を使用するデータディクショナリの統計テーブルを更新できないため、ANALYZE TABLE が失敗することがあります。 キー分散を更新する ANALYZE TABLE 操作では、操作によってテーブル自体が更新された場合でも (MyISAM テーブルの場合など)、障害が発生する可能性があります。 更新された分散統計を取得するには、information_schema_stats_expiry=0 を設定します。

STATISTICS テーブルには、次のカラムがあります:

  • TABLE_CATALOG

    インデックスを含むテーブルが属するカタログの名前。 この値は常に def です。

  • TABLE_SCHEMA

    インデックスを含むテーブルが属するスキーマ (データベース) の名前。

  • TABLE_NAME

    インデックスを含むテーブルの名前。

  • NON_UNIQUE

    このインデックスが重複を含むことができない場合は 0、できる場合は 1。

  • INDEX_SCHEMA

    インデックスが属するスキーマ (データベース) の名前。

  • INDEX_NAME

    インデックスの名前。 このインデックスが主キーである場合、その名前は常に PRIMARY です。

  • SEQ_IN_INDEX

    インデックス内のカラムシーケンス番号であり、1 から始まります。

  • COLUMN_NAME

    カラム名。 EXPRESSION カラムの説明も参照してください。

  • COLLATION

    インデックス内でのカラムのソート方法。 これには、A (昇順)、D (降順) または NULL (ソートなし) の値を指定できます。

  • CARDINALITY

    このインデックス内の一意の値の数の推定値。 この数を更新するには、ANALYZE TABLE または (MyISAM テーブルの場合は)myisamchk -a を実行します。

    CARDINALITY は整数として格納された統計に基づいてカウントされるため、小さいテーブルの場合でも値が正確であるとはかぎりません。 カーディナリティーが高いほど、MySQL が結合を実行するときにこのインデックスを使用する可能性は高くなります。

  • SUB_PART

    インデックス接頭辞。 つまり、カラムが部分的にのみインデックス付けされている場合はインデックス付けされた文字の数で、カラム全体がインデックス付けされている場合は NULL です。

    注記

    接頭辞 limits はバイト単位で測定されます。 ただし、CREATE TABLEALTER TABLE および CREATE INDEX ステートメントのインデックス指定の接頭辞 lengths は、非バイナリ文字列型 (CHAR, VARCHAR, TEXT) の場合は文字数として解釈され、バイナリ文字列型 (BINARY, VARBINARY, BLOB) の場合はバイト数として解釈されます。 マルチバイト文字セットを使用する非バイナリ文字列カラムに接頭辞の長さを指定する場合は、これを考慮してください。

    インデックス接頭辞の詳細は、セクション8.3.5「カラムインデックス」 および セクション13.1.15「CREATE INDEX ステートメント」 を参照してください。

  • PACKED

    キーがパックされる方法を示します。 パックされない場合は NULL

  • NULLABLE

    このカラムに NULL 値を含めることができる場合は YES が、できない場合は '' が含まれます。

  • INDEX_TYPE

    使用されるインデックス方法 (BTREEFULLTEXTHASHRTREE)。

  • COMMENT

    各カラムで説明されていないこのインデックスに関する情報 (このインデックスが無効になっている場合の disabled など)。

  • INDEX_COMMENT

    このインデックスが作成されたときに COMMENT 属性でインデックスに対して提供された任意のコメント。

  • IS_VISIBLE

    オプティマイザがインデックスを参照できるかどうか。 セクション8.3.12「不可視のインデックス」を参照してください。

  • EXPRESSION

    MySQL 8.0.13 以上では、COLUMN_NAME カラムと EXPRESSION カラムの両方に影響する機能キー部分 (機能キー部品 を参照) がサポートされています:

    • 機能しないキー部分の場合、COLUMN_NAME はキー部分でインデックス付けされたカラムを示し、EXPRESSIONNULL です。

    • 関数キー部分の場合、COLUMN_NAME カラムは NULL で、EXPRESSION はキー部分の式を示します。

メモ

  • インデックス用の標準 INFORMATION_SCHEMA テーブルはありません。 MySQL のカラムリストは、QUALIFIER および OWNER がそれぞれ CATALOG および SCHEMA に置き換えられる点を除き、SQL Server 2000 が sp_statistics に対して返すものと似ています。

テーブルインデックスに関する情報は、SHOW INDEX ステートメントからも入手できます。 セクション13.7.7.22「SHOW INDEX ステートメント」を参照してください。 次のステートメントは同等です。

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  AND table_schema = 'db_name'

SHOW INDEX
  FROM tbl_name
  FROM db_name

関連キーワード:  テーブル, SCHEMA, INFORMATION, INNODB, インデックス, カラム, TABLE, 統計, COLUMN, キー