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