Spec-Zone.ru › MySQL 8.4

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

Spec-Zone.ru

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