MySQL 8.4 发行说明
如果键缓存中有足够的块来容纳整个索引的块,或者至少容纳与其非叶子节点相对应的块,那么在开始使用键缓存之前,使用索引块预加载它是有意义的。预加载使您能够以最有效的方式将表索引块放入键缓存缓冲区:按顺序从磁盘读取索引块。
如果没有预加载,块仍然会根据查询的需要被放入键缓存中。尽管块保留在缓存中,因为有足够的缓冲区容纳所有块,但它们是从磁盘按随机顺序获取的,而不是按顺序获取的。
要将索引预加载到缓存中,请使用 LOAD INDEX INTO CACHE
语句。例如,以下语句预加载表 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 |
+---------+--------------+----------+----------+
IGNORE LEAVES
修饰符导致仅预加载索引的非叶子节点的块。因此,所示语句预加载 t1
中的所有索引块,但仅预加载 t2
中非叶子节点的块。
如果已使用 CACHE INDEX
语句将索引分配给键缓存,则预加载会将索引块放入该缓存中。否则,索引将加载到默认键缓存中。