概述

  1. 不支持事务
  2. 内存读写,临时存储,重启后数据丢失,所以还是redis好
  3. 超高的读写效率
  4. 表级锁,并发性差,所以还是redis好
  5. Memory存储引擎默认使用哈希索引
  6. 不支持TEXT和BLOB列类型
  7. 最重要的是,存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存(这个问题之前已经提到,eBay的工程师Igor Chernyshev已经给出了patch解决方案)。
  8. 此外有一点容易被忽视,MySQL数据库使用Memory存储引擎作为临时表来存放查询的中间结果集(intermediate result))。如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘中。之前提到MyISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。

应用场景

  1. 读多写少的静态数据,例如省市区,不过重启会丢失数据
  2. 当缓存使用,有个redis不具备的优点是,可以使用sql语句
  3. 执行排序分组时候,自动创建的系统临时表,如果中间结果超过内存表的限制,就会以myisam格式存在磁盘上

关键参数

-- 最大存储设置2gb,数据量超过会报错,修改这个值,在新的连接中才会生效
set global max_heap_table_size = 2147483648
-- 临时表最大的值,<= 最大存储,如果超过的话会以myisam存在磁盘
set global tmp_table_size = 2147483648

存储文件

在数据目录下:数据目录/数据库名称的文件夹下/有一个文件

  1. 表名.frm,表的定义文件,不需要有数据文件,因为存储在了内存
最后修改:2023 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏