«Индекс кэша» и «Индекс загрузки в кэш» в MySQL - PullRequest
8 голосов
/ 24 декабря 2010

Документация 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 позволяет вам указать, что только определенные индексы из таблицы должны быть назначены кешу. Текущая реализация назначает все индексы таблицы кешу, поэтому нет никаких оснований указывать что-либо, кроме имени таблицы.

Если бы я правильно прочитал ту документацию, на которую я ссылался в ОП, ничего бы этого не случилось.

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

ответ ФСБ на свой вопрос для тех, кто пропустил обновление.

Синтаксис CACHE INDEX позволяет вам указать, что только конкретный индексы из таблицы должны быть назначен в кеш. Электрический ток реализация назначает все таблицы индексы в кеш, так что нет причина указать что-либо кроме имя таблицы.

0 голосов
/ 21 марта 2016

ИНДЕКС КЕША

Это ограничение не применяется в MySQL 5.7.2 или более поздней версии

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...