MEMORY是MySQL中一类非常特殊的存储引擎,与MySQL中其他的存储引擎不同的是MEMORY存储引擎创建包含存储在内存中的内容的专用表。由于数据容易受到崩溃,硬件问题或断电的影响,因此只能将这些表用作临时工作区或从其他表中提取数据的只读缓存。
MEMORY引擎的典型用例涉及以下特征:
1.涉及瞬态非关键数据的操作,例如会话管理或缓存。当MySQL服务器暂停或重新启动时,MEMORY表中的数据将丢失。
2.内存存储,可实现快速访问和低延迟。数据卷可以完全适合内存,而不会导致操作系统交换虚拟内存页。
3.只读或读取是主要数据访问模式(有限更新)。
每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。
MEMORY默认使用哈希索引。速度比使用B型树索引快。当然如果你想用B型树索引,可以在创建索引时指定。
MEMORY性能受到处理更新时单线程执行和表锁开销导致的争用的限制。这会限制负载增加时的可伸缩性,特别是对于包含写的混合语句。尽管对MEMORY表进行了内存处理,但它们不一定比繁忙服务器上的InnoDB表,通用查询或读/写工作负载更快。特别是,执行更新所涉及的表锁定会减慢来自多个会话的MEMORY表的并发使用。根据在MEMORY表上执行的查询类型,您可以创建索引作为默认哈希数据结构(用于基于唯一键查找单个值)或通用B树数据结构(适用于所有类型涉及等于,不等式或范围运算符(例如小于或大于)的