监视数据库的应用程序可能经常使用Performance Schema表。要最有效地为这些表编写查询,请利用它们的索引。例如,包含一个在哪里
子句,根据与索引列中的特定值的比较来限制检索的行。
大多数性能模式表都有索引。不这样做的表是指那些通常包含很少行或不太可能频繁查询的表。Performance Schema索引使优化器能够访问执行计划,而不是全表扫描。这些索引还提高了相关对象的性能,例如sys
使用这些表的模式视图。
要查看给定的Performance Schema表是否具有索引以及索引是什么,请使用显示指数
或显示创建表
:
SHOW INDEX FROM performance_schema。账户\ 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 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。行***************************表:rwlock_instances Create表:Create表' 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,主键(' OBJECT_INSTANCE_BEGIN '), KEY ' NAME ' (' NAME '), KEY ' WRITE_LOCKED_BY_THREAD_ID ' (' WRITE_LOCKED_BY_THREAD_ID '))引擎=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
要查看Performance Schema查询的执行计划以及它是否使用任何索引,请使用解释
:
mysql> SELECT * FROM performance_schema。账户在哪里(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
性能架构索引是虚拟的:它们是性能架构存储引擎的结构,不使用内存或磁盘存储。性能模式向优化器报告索引信息,以便优化器能够构造高效的执行计划。反过来,Performance Schema使用关于查找内容的优化器信息(例如,特定的键值),这样它就可以在不构建实际索引结构的情况下高效地执行查找。这个实现提供了两个重要的好处:
它完全避免了频繁更新的表通常需要的维护成本。
它在查询执行的早期阶段减少了检索的数据量。对于索引列上的条件,Performance Schema有效地只返回满足查询条件的表行。如果没有索引,Performance Schema将返回表中的所有行,要求优化器稍后针对每一行计算条件,以生成最终结果。
性能模式索引是预定义的,不能删除、添加或更改。
性能模式索引类似于散列索引。例如:
它们仅用于使用
=
或< = >
操作符。他们是无序的。如果查询结果必须具有特定的行顺序特征,则包含
命令
条款。
有关哈希索引的更多信息,请参见第8.3.9节“b -树和哈希索引的比较”.