文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 參考手冊  /  ...  /  CACHE INDEX 語法

15.7.8.2 CACHE INDEX 語法

CACHE INDEX {
      tbl_index_list [, tbl_index_list] ...
    | tbl_name PARTITION (partition_list)
  }
  IN key_cache_name

tbl_index_list:
  tbl_name [{INDEX|KEY} (index_name[, index_name] ...)]

partition_list: {
    partition_name[, partition_name] ...
  | ALL
}

CACHE INDEX 語法會將表格索引指定到特定的金鑰快取。它僅適用於 MyISAM 表格,包括分割的 MyISAM 表格。在指定索引之後,如果需要,可以使用 LOAD INDEX INTO CACHE 將它們預先載入快取中。

以下語法會將表格 t1t2t3 的索引指定到名為 hot_cache 的金鑰快取

mysql> CACHE INDEX t1, t2, t3 IN hot_cache;
+---------+--------------------+----------+----------+
| Table   | Op                 | Msg_type | Msg_text |
+---------+--------------------+----------+----------+
| test.t1 | assign_to_keycache | status   | OK       |
| test.t2 | assign_to_keycache | status   | OK       |
| test.t3 | assign_to_keycache | status   | OK       |
+---------+--------------------+----------+----------+

CACHE INDEX 的語法可以讓您指定只將表格中的特定索引指定到快取。但是,實作會將表格的所有索引都指定到快取,因此沒有理由指定表格名稱以外的任何內容。

CACHE INDEX 語法中參考的金鑰快取,可以透過使用參數設定語法設定其大小,或在伺服器參數設定中建立。例如

SET GLOBAL keycache1.key_buffer_size=128*1024;

金鑰快取參數是作為結構化系統變數的成員存取的。請參閱 第 7.1.9.5 節,「結構化系統變數」

在您將索引指定給金鑰快取之前,該金鑰快取必須存在,否則會發生錯誤。

mysql> CACHE INDEX t1 IN non_existent_cache;
ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'

預設情況下,表格索引會指定給伺服器啟動時建立的主要(預設)金鑰快取。當金鑰快取被銷毀時,指定給它的所有索引都會重新指定給預設金鑰快取。

索引指定會影響伺服器全域:如果一個用戶端將索引指定給給定的快取,則此快取會用於所有涉及該索引的查詢,無論哪個用戶端發出查詢。

分割的 MyISAM 表格支援 CACHE INDEX。您可以將一個、數個或所有分割區的一個或多個索引指定給給定的金鑰快取。例如,您可以執行以下操作

CREATE TABLE pt (c1 INT, c2 VARCHAR(50), INDEX i(c1))
    ENGINE=MyISAM
    PARTITION BY HASH(c1)
    PARTITIONS 4;

SET GLOBAL kc_fast.key_buffer_size = 128 * 1024;
SET GLOBAL kc_slow.key_buffer_size = 128 * 1024;

CACHE INDEX pt PARTITION (p0) IN kc_fast;
CACHE INDEX pt PARTITION (p1, p3) IN kc_slow;

前述的語法組會執行下列動作

  • 建立一個具有 4 個分割區的分割表格;這些分割區會自動命名為 p0、...、p3;此表格在 c1 資料行上有名為 i 的索引。

  • 建立 2 個名為 kc_fastkc_slow 的金鑰快取

  • 將分割區 p0 的索引指定給 kc_fast 金鑰快取,並將分割區 p1p3 的索引指定給 kc_slow 金鑰快取;其餘分割區 (p2) 的索引會使用伺服器的預設金鑰快取。

如果您希望將表格 pt 中所有分割區的索引都指定給名為 kc_all 的單一金鑰快取,則可以使用以下兩個語法中的任何一個

CACHE INDEX pt PARTITION (ALL) IN kc_all;

CACHE INDEX pt IN kc_all;

剛才顯示的這兩個語法是等效的,而且發出任何一個語法都具有完全相同的效果。換句話說,如果您希望將分割表格的所有分割區的索引指定給相同的金鑰快取,則 PARTITION (ALL) 子句是選用的。

將多個分割區的索引指定給金鑰快取時,分割區不需要是連續的,而且您不需要以任何特定的順序列出它們的名稱。任何未明確指定給金鑰快取的分割區的索引都會自動使用伺服器預設金鑰快取。

分割的 MyISAM 表格也支援索引預先載入。如需更多資訊,請參閱 第 15.7.8.5 節,「LOAD INDEX INTO CACHE 語法」