データディクショナリの導入により、次の 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_expiry
を 0
に設定すると、INFORMATION_SCHEMA
クエリーでストレージエンジンから直接最新の統計を取得できます。これは、キャッシュされた統計の取得ほど高速ではありません。
詳細は、セクション8.2.3「INFORMATION_SCHEMA クエリーの最適化」を参照してください。
MySQL 8.0 の INFORMATION_SCHEMA
テーブルはデータディクショナリに密接に関連付けられているため、いくつかの使用方法が異なります。 セクション14.7「データディクショナリの使用方法の違い」を参照してください。