13.7.6.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;
Параметры кэша ключей доступны как члены структурированной системной переменной. См. Раздел 5.1.8.3, “Структурированные системные переменные”.
Кэш ключей должен существовать до назначения в него индексов, в противном случае произойдёт ошибка:
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 таблиц. Для получения дополнительной информации, см. Раздел 13.7.6.5, “Заявление LOAD INDEX INTO CACHE”.
© 2025 Oracle
Licensed under the GPLv2 License.