MySQL 8.0 リファレンスマニュアル  /  MySQL データディクショナリ  /  INFORMATION_SCHEMA とデータディクショナリの統合

14.5 INFORMATION_SCHEMA とデータディクショナリの統合

データディクショナリの導入により、次の INFORMATION_SCHEMA テーブルがデータディクショナリテーブルのビューとして実装されます:

  • CHARACTER_SETS

  • CHECK_CONSTRAINTS

  • COLLATIONS

  • COLLATION_CHARACTER_SET_APPLICABILITY

  • COLUMNS

  • COLUMN_STATISTICS

  • EVENTS

  • FILES

  • INNODB_COLUMNS

  • INNODB_DATAFILES

  • INNODB_FIELDS

  • INNODB_FOREIGN

  • INNODB_FOREIGN_COLS

  • INNODB_INDEXES

  • INNODB_TABLES

  • INNODB_TABLESPACES

  • INNODB_TABLESPACES_BRIEF

  • INNODB_TABLESTATS

  • KEY_COLUMN_USAGE

  • KEYWORDS

  • PARAMETERS

  • PARTITIONS

  • REFERENTIAL_CONSTRAINTS

  • RESOURCE_GROUPS

  • ROUTINES

  • SCHEMATA

  • STATISTICS

  • ST_GEOMETRY_COLUMNS

  • ST_SPATIAL_REFERENCE_SYSTEMS

  • TABLES

  • TABLE_CONSTRAINTS

  • TRIGGERS

  • VIEWS

  • VIEW_ROUTINE_USAGE

  • VIEW_TABLE_USAGE

これらのテーブルに対するクエリーは、他の低速な方法ではなくデータディクショナリテーブルから情報を取得するため、より効率的になりました。 特に、データディクショナリテーブルのビューである INFORMATION_SCHEMA テーブルごとに、次のようにします:

  • サーバーは、INFORMATION_SCHEMA テーブルのクエリーごとに一時テーブルを作成する必要がなくなりました。

  • 基礎となるデータディクショナリテーブルに、ディレクトリスキャンによって以前に取得された値 (データベース名やデータベース内のテーブル名を列挙する場合など) またはファイルオープン操作 (.frm ファイルから情報を読み取る場合など) が格納されている場合、これらの値に対する INFORMATION_SCHEMA クエリーでは、かわりにテーブルルックアップが使用されるようになりました。 (また、ビュー以外の INFORMATION_SCHEMA テーブルの場合でも、データベース名やテーブル名などの値はデータディクショナリから参照によって取得されるため、ディレクトリまたはファイルのスキャンは必要ありません。)

  • 基礎となるデータディクショナリテーブルのインデックスを使用すると、オプティマイザは、クエリーごとに一時テーブルを使用して INFORMATION_SCHEMA テーブルを処理した以前の実装に当てはまらない効率的なクエリー実行計画を作成できます。

前述の改善は、データディクショナリテーブルのビューである INFORMATION_SCHEMA テーブルに対応する情報を表示する SHOW ステートメントにも適用されます。 たとえば、SHOW DATABASES では、SCHEMATA テーブルと同じ情報が表示されます。

データディクショナリテーブルのビューの導入に加えて、STATISTICS テーブルおよび TABLES テーブルに含まれるテーブル統計がキャッシュされ、INFORMATION_SCHEMA クエリーのパフォーマンスが向上しました。 information_schema_stats_expiry システム変数は、キャッシュされたテーブルの統計が期限切れになるまでの期間を定義します。 デフォルトは 86400 秒 (24 時間) です。 キャッシュされた統計がない場合、または統計が期限切れになっている場合は、テーブル統計カラムのクエリー時にストレージエンジンから統計が取得されます。 特定のテーブルのキャッシュされた値をいつでも更新するには、ANALYZE TABLE を使用

information_schema_stats_expiry0 に設定すると、INFORMATION_SCHEMA クエリーでストレージエンジンから直接最新の統計を取得できます。これは、キャッシュされた統計の取得ほど高速ではありません。

詳細は、セクション8.2.3「INFORMATION_SCHEMA クエリーの最適化」を参照してください。

MySQL 8.0 の INFORMATION_SCHEMA テーブルはデータディクショナリに密接に関連付けられているため、いくつかの使用方法が異なります。 セクション14.7「データディクショナリの使用方法の違い」を参照してください。


関連キーワード:  テーブル, INFORMATION, SCHEMA, INNODB, クエリー, 統計, 情報, 取得, キャッシュ, ストレージ