# Size of the Key Buffer, used to cache index blocks for MyISAM tables.
# Do not set it larger than 30% of your available memory, as some memory
# is also required by the OS to cache rows. Even if you‘re not using
# MyISAM tables, you should still set it to 8-64M as it will also be
# used for internal temporary disk tables.
key_buffer_size=8M
MyISAM最为关键的一项配置。
有许多MyISAM表时可以为键缓存分配多一点内存,但不应超出OS保留缓存的30%,MyISAM自身只缓存索引,不缓存数据,数据的读取依赖操作系统层面的缓存。
默认情况下MyISAM把索引都保存到默认键缓存,但也可以设置多个键缓存。
一些操作如group by等会使用到内部临时表,5.7之前内部临时表默认使用MyISAM,5.7之后使用Innodb。临时表的引擎可以通过internal_tmp_disk_storage_engine指定。
但即使存储引擎不使用MyISAM,还是应设置8-64M大小的键缓存。
扩展:使用Innodb做临时表引擎时,临时表保存于共享表空间,并且由于此空间的特性,不会动态释放。当有很多并发Session使用了临时表,会大量占用磁盘空间。详情见临时表。(临时表保存于内存,超过阈值会写入磁盘)