Spec-Zone.ru › MySQL 5.7

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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/cache-index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API