文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  優化效能架構查詢

10.2.4 優化效能架構查詢

監控資料庫的應用程式可能會頻繁使用效能架構資料表。為了最有效率地撰寫這些資料表的查詢,請利用它們的索引。例如,包含一個 WHERE 子句,該子句根據與索引資料行中特定值的比較來限制檢索的列。

大多數效能架構資料表都有索引。沒有索引的資料表通常是那些包含少量列或不太可能頻繁查詢的資料表。效能架構索引讓最佳化工具能夠存取完整資料表掃描以外的執行計畫。這些索引也提高了相關物件的效能,例如使用這些資料表的 sys 架構檢視。

若要查看給定的效能架構資料表是否有索引以及它們是什麼,請使用 SHOW INDEXSHOW 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

若要查看效能架構查詢的執行計畫以及它是否使用任何索引,請使用 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 資料表,其中包含 USERHOST 資料行的 ACCOUNT 索引。

效能架構索引是虛擬的:它們是效能架構儲存引擎的建構,不使用記憶體或磁碟儲存空間。效能架構將索引資訊報告給最佳化工具,以便它可以建構有效的執行計畫。效能架構反過來使用最佳化工具關於要尋找的內容(例如,特定的金鑰值)的資訊,以便它可以執行有效的查詢,而無需建立實際的索引結構。此實作提供兩個重要的優點:

  • 它完全避免了經常更新的資料表通常會產生的維護成本。

  • 它在查詢執行的早期階段減少了檢索的資料量。對於索引欄位上的條件,Performance Schema 僅有效率地返回符合查詢條件的資料表列。如果沒有索引,Performance Schema 會返回資料表中所有的列,這需要最佳化工具稍後針對每一列評估條件以產生最終結果。

Performance Schema 的索引是預先定義好的,無法刪除、新增或變更。

Performance Schema 的索引類似於雜湊索引。例如:

  • 它們僅用於使用 =<=> 運算子的相等比較。

  • 它們是無序的。如果查詢結果必須具有特定的列排序特性,請包含 ORDER BY 子句。

有關雜湊索引的更多資訊,請參閱第 10.3.9 節,「B-樹和雜湊索引的比較」