Spec-Zone.ru › MySQL 9.2

10.2.4 Оптимизация запросов Performance Schema

Приложения, которые отслеживают работу баз данных, могут часто использовать таблицы Performance Schema. Чтобы писать запросы к этим таблицам наиболее эффективно, используйте их индексы. Например, включите в запрос условие, которое ограничивает извлекаемые строки, основываясь на сравнении со значениями в индексированном столбце.

Большинство таблиц Performance Schema имеют индексы. Таблицы, которые не имеют индексов, обычно содержат мало строк или вряд ли будут часто запрашиваться. Индексы Performance Schema дают оптимизатору доступ к планам выполнения, отличным от полного сканирования таблицы. Эти индексы также повышают производительность для связанных объектов, таких как представления схемы sys, которые используют эти таблицы.

Чтобы узнать, есть ли у заданной таблицы Performance Schema индексы и каковы они, используйте SHOW INDEX или SHOW CREATE TABLE:

mysql> 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

Чтобы увидеть план выполнения запроса Performance Schema и узнать, использует ли он какие-либо индексы, используйте EXPLAIN:

mysql> 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 показывает, что оптимизатор использует индекс таблицы accounts ACCOUNT, который состоит из столбцов USER и HOST.

Индексы Performance Schema являются виртуальными: они являются конструкцией движка хранения Performance Schema и не используют память или дисковое пространство. Performance Schema передает информацию об индексе оптимизатору, чтобы тот мог строить эффективные планы выполнения. В свою очередь, Performance Schema использует информацию оптимизатора о том, что искать (например, определенное значение ключа), чтобы выполнять эффективные запросы без создания фактических структур индексов. Эта реализация предоставляет две важные выгоды:

  • Она полностью избегает затрат на обслуживание, обычно возникающих для таблиц, которые часто обновляются.

  • Она на ранней стадии выполнения запроса уменьшает количество извлекаемых данных. Для условий по индексированным столбцам Performance Schema эффективно возвращает только строки таблицы, которые удовлетворяют условиям запроса. Без индекса Performance Schema вернул бы все строки в таблице, потребовав от оптимизатора позже оценить условия для каждой строки, чтобы получить окончательный результат.

Индексы Performance Schema предопределены и не могут быть удалены, добавлены или изменены.

Индексы Performance Schema похожи на хеш-индексы. Например:

  • Они используются только для сравнений по равенству, которые используют операторы = или <=>.

  • Они неупорядочены. Если результат запроса должен иметь определенные характеристики упорядочения строк, включите условие ORDER BY.

Дополнительную информацию о хеш-индексах см. в Разделе 10.3.9, «Сравнение индексов B-дерева и хеш-индексов».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/performance-schema-optimization.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API