LOAD INDEX INTO CACHE
tbl_index_list [, tbl_index_list] ...
tbl_index_list:
tbl_name
[PARTITION (partition_list)]
[{INDEX|KEY} (index_name[, index_name] ...)]
[IGNORE LEAVES]
partition_list: {
partition_name[, partition_name] ...
| ALL
}
LOAD INDEX INTO CACHE
陳述式會將資料表索引預先載入到索引快取中,該索引快取已透過明確的 CACHE INDEX
陳述式指派給它,否則會載入到預設索引快取中。
LOAD INDEX INTO CACHE
僅適用於 MyISAM
資料表,包括分割的 MyISAM
資料表。此外,分割資料表上的索引可以針對一個、多個或所有分割區進行預先載入。
IGNORE LEAVES
修飾詞會導致僅預先載入索引的非葉節點區塊。
IGNORE LEAVES
也支援用於分割的 MyISAM
資料表。
以下陳述式會預先載入資料表 t1
和 t2
的索引節點(索引區塊)
mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES;
+---------+--------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------+----------+----------+
| test.t1 | preload_keys | status | OK |
| test.t2 | preload_keys | status | OK |
+---------+--------------+----------+----------+
此陳述式會從 t1
預先載入所有索引區塊。它只會從 t2
預先載入非葉節點的區塊。
LOAD INDEX INTO CACHE
的語法允許您指定僅應預先載入資料表中的特定索引。但是,實作會將資料表的所有索引預先載入到快取中,因此沒有理由指定資料表名稱以外的任何內容。
可以預先載入分割的 MyISAM
資料表中特定分割區上的索引。例如,在以下 2 個陳述式中,第一個會預先載入分割資料表 pt
的分割區 p0
的索引,而第二個會預先載入相同資料表的分割區 p1
和 p3
的索引
LOAD INDEX INTO CACHE pt PARTITION (p0);
LOAD INDEX INTO CACHE pt PARTITION (p1, p3);
若要預先載入資料表 pt
中所有分割區的索引,您可以使用下列兩個陳述式的任何一個
LOAD INDEX INTO CACHE pt PARTITION (ALL);
LOAD INDEX INTO CACHE pt;
剛剛顯示的兩個陳述式是等效的,發出任何一個陳述式都會產生完全相同的效果。換句話說,如果您希望預先載入分割資料表的所有分割區的索引,則 PARTITION (ALL)
子句是可選的。
當預先載入多個分割區的索引時,分割區不需要是連續的,並且您不需要按任何特定順序列出它們的名稱。
除非資料表中的所有索引都具有相同的區塊大小,否則 LOAD INDEX INTO CACHE ... IGNORE LEAVES
會失敗。若要判斷資料表的索引區塊大小,請使用 myisamchk -dv 並檢查 Blocksize
欄位。