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.
Следующее заявление назначает индексы из таблиц t1, t2 и t3 к кэшу ключей с именем 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'
По умолчанию, табличные индексы назначаются главному (по умолчанию) кэшу ключей, созданному при запуске сервера. При уничтожении кэша ключей все назначенные ему индексы повторно назначаются в кэш ключей по умолчанию.
Назначение индекса влияет на сервер глобально: если один клиент назначает индекс для данного кэша, этот кэш используется для всех запросов, связанных с индексом, независимо от того, какой клиент отправляет запросы.
CACHE INDEX поддерживается для разделяемых MyISAM таблиц. Вы можете назначить один или несколько индексов для одного, нескольких или всех разделов в данном кэше ключей. Например, вы можете сделать следующее:
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; эта таблица имеет индекс с именемiпо столбцуc1.Создает 2 кэша ключей с именами
kc_fastиkc_slowНазначает индекс для раздела
p0кэшу ключейkc_fast, и индексы для разделовp1иp3кэшу ключей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».
© 2025 Oracle
Licensed under the GPLv2 License.