MySQL学习-存储引擎(二)

42 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

前言

上篇我们学习了MySQL中的存储引擎。有兴趣的小伙伴可以阅读(MySQL学习-存储引擎(一))。
下面我们继续学习MySQL中的存储引擎。

存储引擎

MyISAM引擎

MyISAM引擎是主要的非事务处理存储引擎。

  • MyISAM提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是奔溃后无法安全回复。
  • 是5.5之前默认的存储引擎。
  • 优势是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用。
  • 针对数据统计有额外的常数存储。故而count(*)的查询效率很高。
  • 数据文件结构:
    • 表名.frm存储表结构
    • 表名.MYD存储数据(MYData)
    • 表名.MYI存储索引(MYIndex)
  • 应用场景:只读应用或以读为主的业务。

Archive引擎

Archive引擎用于数据存档。

Blackhole引擎

Blackhole引擎用于丢弃写操作,读操作会返回空内容。

CSV引擎

CSV引擎用于存储数据时,以逗号分隔各个数据项。存储后的结果,可以使用Excel等电子表格应用程序读取,甚至写入。

Memory引擎

Memory引擎是置于内存的表。采用的逻辑介质是内存,响应速度很快,但是当mysqld守护进程奔溃的时候数据会丢失。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定)。

  • 主要特征:
    • 同时支持哈希索引和B+树索引。
    • Memory表至少比MyISAM表要快一个量级。
    • Memory表的大小是受到限制的,表的大小主要取决于两个参数,分别是max_rows和max_heap_table_size。其中,max_rows可以在创建表时指定,max_heap_table_size的大小默认为16MB,可以按需要进行扩大。
    • 数据文件与索引文件分开存储。
    • 确定:其数据易丢失,生命周期短。基于这个缺陷,选择Memory引擎时需要特别小心。
  • 使用场景:
    • 目标数据比较小,而且非常频繁的进行访问,在内存中存放数据,如果太大的数据会造成内存溢出。可以通过参数max_heap_table_size控制Memory表的大小,限制Memory表最大的大小。
    • 如果数据是临时的,而且必须立即可用得到,那么就可以放在内存中。
    • 存储在Memory表中的数据如果突然间丢失的话也没有太大的关系。

今天先学习到这里,明天继续。