Документация MySQL подразумевает, что вы можете назначить один или несколько индексов таблицы в буфер именованного ключа (и предварительно загрузить их). Определение синтаксиса в руководстве:
CACHE INDEX
tbl_index_list [, tbl_index_list] ...
IN key_cache_name
tbl_index_list:
tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]
, что говорит о том, что вы можете назначить только один из индексов таблицы в буфер именованного ключа. Например:
SET GLOBAL my_keys.key_buffer_size=512*1048576;
CACHE INDEX my_table KEY (PRIMARY) INTO my_keys;
LOAD INDEX INTO CACHE my_table KEY (PRIMARY);
будет загружать только ПЕРВИЧНЫЙ индекс my_table.
Но из того, что я могу сказать, это работает не так, по крайней мере, не в 5.0.87. Вместо этого сервер, по-видимому, загружает все индексы таблицы, фактически игнорируя часть списка индексов в скобках.
Например, у меня есть большая словарная таблица:
CREATE TABLE dict (
id INT NOT NULL PRIMARY KEY,
name VARCHAR(330) NOT NULL,
UNIQUE KEY (name) );
Теперь, если я попытаюсь загрузить только индекс PRIMARY, резидентный размер mysqld в памяти увеличивается на размер dict.MYI (в моем примере 733 МБ), который на несколько больше размера только индекса PRIMARY (103 MB).
ОБНОВЛЕНИЕ 2011-01-08 : Документация для CACHE INDEX
фактически дает ответ:
Синтаксис CACHE INDEX позволяет вам указать, что только определенные индексы из таблицы должны быть назначены кешу. Текущая реализация назначает все индексы таблицы кешу, поэтому нет никаких оснований указывать что-либо, кроме имени таблицы.
Если бы я правильно прочитал ту документацию, на которую я ссылался в ОП, ничего бы этого не случилось.