假设一个数据库由 1 GB 的数据和 1 GB 的索引数据组成。
为了最小化磁盘 IO 并因此最大化性能,我想为 MySQL 分配内存,以便包括索引在内的整个数据集可以保存在 RAM 中(假设机器有大量的 RAM)。
InnoDB 参数innodb_buffer_pool_size
用于指定 InnoDB 用于缓存其表的数据和索引的内存缓冲区的大小。(注意:内存用于数据和索引。)
MyISAM 参数key_buffer_size
用于指定 MyISAM 用于缓存其表的索引的内存缓冲区的大小。(注意:内存仅用于索引。)
如果我希望 2 GB 数据库(1 GB 数据和 1 GB 索引)适合 InnoDB 下的内存,我只需innodb_buffer_pool_size
将2GB
. 这两个千兆字节将同时保存数据和索引。
但是,当将 MyISAM 键设置key_buffer_size
为该空间时,2GB
该空间将用于索引,而不是用于数据。
我的问题是:
- MyISAM 的“数据缓冲区大小”(不是索引数据)可以显式配置吗?
- MyISAM 什么时候从磁盘读取表数据(不包括索引数据),什么时候从内存中读取?