Предположим, что база данных состоит из 1 ГБ данных и 1 ГБ данных индекса.
Чтобы свести к минимуму диск IO и, следовательно, увеличить производительность, я хочу выделить память для MySQL, чтобы весь набор данных, включая индексы, мог храниться в ОЗУ (предположим, что машина имеет ОЗУ в изобилии).
Параметр InnoDB innodb_buffer_pool_size
используется для указания размера буфера памяти, который InnoDB использует для кэширования данных и индексов своих таблиц. (Примечание: память используется для индексов данных AND.)
Параметр MyISAM key_buffer_size
используется для указания размера буфера памяти, который MyISAM использует для кэширования индексов своих таблиц. (Примечание: для индексов используется ТОЛЬКО).
Если я хочу, чтобы база данных 2 ГБ (данные 1 ГБ и индекс 1 ГБ) вписывалась в память в InnoDB, я бы просто сконфигурировал innodb_buffer_pool_size
как 2GB
. Два гигабайта будут содержать как данные, так и индекс.
Однако при установке ключа MyISAM key_buffer_size
на 2GB
это пространство будет использоваться для индекса, но не для данных.
Мои вопросы:
- Можно ли настроить размер буфера данных MyISAM "(не индексные данные)"?
- Когда MyISAM будет считывать данные таблицы (исключая данные индекса) с диска и когда он будет считываться из памяти?