文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 資料表的 ACCOUNT 索引,該索引包含 USERHOST 欄位。

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

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

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

效能架構索引是預先定義的,無法捨棄、新增或變更。

效能架構索引類似於雜湊索引。例如:

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

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

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