MySQL的存储引擎

本文最后更新于:2 年前

你在瞅啥

主要介绍MySQL 的常见的四种储存引擎的特点。

MySQL体系架构

插件式的表存储引擎。

优势:可以根据具体的应用建立不同的存储引擎表。

InnoDB

  • 默认引擎。
  • 事务型引擎。
  • 最重要、使用最广泛。
  • 处理大量短期(short-live)事务。

MyISAM

  • 高速引擎
  • 前默认引擎(5.1之前)
  • 不支持事务和行级锁
  • 崩溃后无法安全修复
  • 表级锁,容易产生性能问题

Memory

  • 极高速引擎。比MyISAM快一个数量级(10倍)
  • 支持插入、更新、查询
  • 文件存储在内存中
  • 重启表结构保存,数据丢失
  • 应用: 查找(lookup)/映射表(mapping)、缓存周期性聚合数据(periodically aggregated data)的结果、保存数据分析的中间数据。

Archive

  • 仅支持INSERT和SELECT操作。缓存所有写。
  • 磁盘IO少(较其他)。利用zlib对插入的行进行压缩。
  • SELECT是全表扫描
  • 应用: 日志、数据采集类应用

CSV

  • 可以直接处理CSV文件
  • 不支持索引
  • 应用: 跨平台数据交换

FaIcon

  • 支持事务

InnoDB和MyISAM对比

  1. 事务。InnoDB支持事务。
  2. 外键。InnoDb支持外键。(包含外键的InnoDB转换MyISAM会失败)
  3. 聚集索引。InnoDB支持聚集索引。
    • InnoDB
      1. 聚集索引文件保存在主键索引的叶子节点上,因此InnoDB必须要有主键。
      2. 主键索引效率高,但是辅助索引要查询两次(先查询主键,再通过主键查询数据)
      3. 因此主键不能太大,防止其他索引也会很大
    • MyISAM
      • 数据文件分离
      • 索引保存数据文件的指针
      • 主键索引和辅助索引相互独立
  4. 查询速度。
    • InnoDB不保存集体行数,执行SELECT COUNT(*) FROM table,全表搜索。
    • MyISAM使用变量记录表的行数,对于上述语句执行很快。
  5. 最小锁粒度。
    • InnoDB是行锁
    • MyISAM是表锁,会导致其他操作被阻塞,因此并发访问受限。

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!