Assume a database consisting of 1 GB of data and 1 GB of index data.
To minimize disk IO and hence maximize performance I want to allocate memory to MySQL so that the entire dataset including indexes can be kept in RAM (assume that the machine has RAM in abundance).
The InnoDB parameter innodb_buffer_pool_size
is used to specify the size of the memory buffer InnoDB uses to cache data and indexes of its tables. (Note: The memory is used for data AND indexes.)
The MyISAM parameter key_buffer_size
is used to specify the size of the memory buffer MyISAM uses to cache indexes of its tables. (Note: The memory is used ONLY for indexes.)
If I want the 2 GB database (1 GB data and 1 GB index) to fit into memory under InnoDB, I'd simply configure the innodb_buffer_pool_size
to be 2GB
. The two gigabytes will hold both the data and the index.
However, when setting the MyISAM key key_buffer_size
to 2GB
that space will be used for the index, but not for the data.
My questions are:
- Can MyISAM's "data buffer size" (not index data) be configured explicitly?
- When will MyISAM read table data (excluding index data) from disk and when will it read from memory?