Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


10.10.2.4 索引预加载

如果索引缓存中有足够的块,可以容纳整个索引或至少非叶子节点对应的块,那么在开始使用索引时预加载索引块是有意义的。预加载可以将表索引块放入缓冲区中,以最有效地方式从磁盘sequential读取索引块。

如果不进行预加载,索引块仍然会根据查询需要被放入缓存中。虽然缓存中有足够的buffer空间容纳所有块,但它们仍然会从磁盘中随机读取,而不是sequential。

要将索引预加载到缓存中,可以使用LOAD INDEX INTO CACHE语句。例如,以下语句预加载了表t1t2的索引节点(索引块):

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语句将索引分配给一个缓存,那么预加载将将索引块放入该缓存中。否则,索引将被加载到默认的索引缓存中。