このページは機械翻訳したものです。
データベースを監視するアプリケーションでは、「パフォーマンススキーマ」テーブルを頻繁に使用できます。 これらのテーブルに対するクエリーを最も効率的に記述するには、インデックスを利用します。 たとえば、インデックス付けされたカラムの特定の値との比較に基づいて、取得される行を制限する WHERE
句を含めます。
「最もパフォーマンスの高いスキーマ」テーブルにはインデックスがあります。 通常は少数の行を含むテーブルではないか、頻繁にクエリーが行われる可能性が低いテーブル。 パフォーマンススキーマインデックスを使用すると、オプティマイザは全テーブルスキャン以外の実行計画にアクセスできます。 これらのインデックスは、それらのテーブルを使用する sys
スキーマビューなど、関連するオブジェクトのパフォーマンスも向上します。
特定の「パフォーマンススキーマ」テーブルにインデックスがあるかどうかとその内容を確認するには、SHOW INDEX
または SHOW CREATE TABLE
を使用します:
Press CTRL+C to copymysql> SHOW INDEX FROM performance_schema.accounts\G *************************** 1. row *************************** Table: accounts Non_unique: 0 Key_name: ACCOUNT Seq_in_index: 1 Column_name: USER Collation: NULL Cardinality: NULL Sub_part: NULL Packed: NULL Null: YES Index_type: HASH Comment: Index_comment: Visible: YES *************************** 2. row *************************** Table: accounts Non_unique: 0 Key_name: ACCOUNT Seq_in_index: 2 Column_name: HOST Collation: NULL Cardinality: NULL Sub_part: NULL Packed: NULL Null: YES Index_type: HASH Comment: Index_comment: Visible: YES mysql> SHOW CREATE TABLE performance_schema.rwlock_instances\G *************************** 1. row *************************** Table: rwlock_instances Create Table: CREATE TABLE `rwlock_instances` ( `NAME` varchar(128) NOT NULL, `OBJECT_INSTANCE_BEGIN` bigint(20) unsigned NOT NULL, `WRITE_LOCKED_BY_THREAD_ID` bigint(20) unsigned DEFAULT NULL, `READ_LOCKED_BY_COUNT` int(10) unsigned NOT NULL, PRIMARY KEY (`OBJECT_INSTANCE_BEGIN`), KEY `NAME` (`NAME`), KEY `WRITE_LOCKED_BY_THREAD_ID` (`WRITE_LOCKED_BY_THREAD_ID`) ) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
パフォーマンススキーマクエリーの実行計画およびインデックスを使用するかどうかを確認するには、EXPLAIN
を使用します:
Press CTRL+C to copymysql> EXPLAIN SELECT * FROM performance_schema.accounts WHERE (USER,HOST) = ('root','localhost')\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: accounts partitions: NULL type: const possible_keys: ACCOUNT key: ACCOUNT key_len: 278 ref: const,const rows: 1 filtered: 100.00 Extra: NULL
EXPLAIN
出力は、USER
カラムと HOST
カラムで構成される accounts
テーブルの ACCOUNT
インデックスをオプティマイザが使用することを示しています。
パフォーマンススキーマのインデックスは仮想です: これらはパフォーマンススキーマストレージエンジンの構成であり、メモリーやディスクストレージを使用しません。 パフォーマンススキーマは、効率的な実行計画を構築できるように、オプティマイザにインデックス情報を報告します。 パフォーマンススキーマは、実際のインデックス構造を構築せずに効率的な検索を実行できるように、検索対象に関するオプティマイザ情報 (特定のキー値など) を使用します。 この実装には、次の 2 つの重要な利点があります:
頻繁に更新されるテーブルで通常発生するメンテナンスコストを完全に回避します。
これにより、クエリー実行の初期段階で取得されるデータ量が削減されます。 インデックス付きカラムの条件の場合、パフォーマンススキーマはクエリー条件を満たすテーブル行のみを効率的に返します。 インデックスがない場合、パフォーマンススキーマはテーブル内のすべての行を返すため、オプティマイザはあとで各行に対して条件を評価して最終結果を生成する必要があります。
パフォーマンススキーマのインデックスは事前定義されており、削除、追加、または変更できません。
パフォーマンススキーマのインデックスはハッシュインデックスに似ています。 例:
これらは、
=
または<=>
演算子を使用する等価比較にのみ使用されます。これらは順序付けられていません。 クエリー結果に特定の行順序付け特性が必要な場合は、
ORDER BY
句を含めます。
ハッシュインデックスの詳細は、セクション8.3.9「B ツリーインデックスとハッシュインデックスの比較」 を参照してください。