mysql 常用存储引擎简介

InnoDB 引擎:具备外键支持功能的事务存储引擎

  • InnoDB 视为处理巨大数据量的最大性能设计的存储引擎。
  • mysql 从 3.23.34a 开始包含 InnoDB 引擎,大于等于5.5之后默认采用 InnoDB 引擎。
  • InnoDB 是 mysql 的默认事务引擎,它被设计用来处理大量短期(short-lived)事务,可以确保事务的完整提交(Commit)和回滚(Rollback)。
  • InnoDB 存储引擎在实际应用中拥有诸多优势,比如操作便利、提高了数据库的性能、维护成本低等。如果由于硬件或软件的原因导致服务器崩溃,那么在重启服务器后不需要进行额外操作,InnoDB 崩溃回复功能能自动将之前提交的内容定型,然后撤销没有提交的进程,重启之后继续从崩溃点开始执行。
  • mysql 5.5.7 到 5.6.6 版本 InnoDB 引擎会把表数据存储在ibdata1文件(系统表空间)中;mysql 5.6.6 版本后会把表结构存储在.frm文件中,将表数据存储在.ibd文件(独立表空间)中;到 mysql 8 版本时表结构相关数据合并到了.ibd文件中,因此.frm文件将不会存在。

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

  • MyISAM 提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但不支持事务、行级锁、外键,是5.5之前默认的存储引擎。
  • MyISAM 的优势是访问的速度快,主要用于对事务的完成新没有要求或以 SELECT、INSERT 为主的应用。
  • MyISAM 针对数据统计有额外的常数存储,因此针对 count(*) 查询效率特别高
  • mysql 8 版本之前 MyISAM 引擎会把表结构存储在.frm文件中,将表数据存储在.MYD文件中,将索引存储在.MYI文件中;mysql 8 版本之后.frm文件变更为.sdi文件。

InnoDB 引擎和 MyISAM 引擎如何选择?

  • 对比 MyISAM 引擎,InnoDB 处理写操作的效率差一些,并且会占用更多的磁盘空间来保存数据和索引。
  • MyISAM 只缓存索引,不缓存真实数据;InnoDB 不仅缓存索引还要缓存真是数据,对内存要求较高,且内存大小对性能有决定性影响。
  • 如果我们需要频繁的对表中的数据进行增删改查,则应该优先选择 InnoDB 引擎。
  • 如果没有非常特别的原因需要使用其他的存储引擎,则应该优先选择 InnoDB 引擎。

Archive 引擎:用于数据存档的存储引擎

  • archive 是归档的意思,仅仅支持插入和查询两种功能(被插入后不能修改)。
  • 在 mysql5.5 之后支持索引功能。
  • 拥有很好的压缩机制,使用 zlib 压缩库,在记录请求时进行实时压缩,经常被用来作为仓库使用。
  • 创建 ARCHIVE 表时,存储引擎会创建名称以表名开头的文件。数据文件的扩展名为 .ARZ
  • 根据英文的测试结果来看,同样数据量下,Archive 表比 MyISAM 表要小约 75%,比 InnoDB 表小约 83%。
  • Archive 引擎采用了行级锁。支持 AUTO_INCREMENT 列属性。AUTO_INCREMENT 列可以具有唯一索引或非唯一索引,在其他列上创建索引会导致错误。
  • Archive 表适合日志和数据采集(档案)类应用,适合存储大量独立的作为历史记录的数据,拥有很高的插入速度,但对查询的支持较差。

CSV 引擎:存储数据时,以逗号分隔各个数据项

  • CSV 引擎可以将普通 CSV 文件作为 mysql 的表来处理,但不支持索引。
  • CSV 引擎可以作为一种数据交换的机制,非常有用。
  • CSV 引擎存储的数据可以之间在操作系统里用文本编辑器或 excel 读取。
  • CSV 引擎对于数据的快速导入、导出是有明显优势的。
  • CSV 引擎的列不支持 null 值,在创建表时必须将所有列都声明为 not null

Memory 引擎:置于内存的表

  • Memory 采用的逻辑介质是内存,响应速度快,生命周期短,但是当 mysqld 守护进程崩溃的时候数据会丢失,因此选择 Memory 存储引擎时需要特别小心。另外要求存储的数据长度是数据长度不变的格式,像 Blob 和 Text 类型的数据不可用(长度不固定)
  • Memory 同事支持哈希(HASH)索引和 B+树索引
    • 哈希索引进行相等查询时比较快,但是对于范围查询则慢很多。
    • 默认使用哈希索引,其速度要比使用B型树(BTREE)索引快。
    • 如果希望使用B树索引,可以在创建索引时选择使用。
  • Memory 表比 MyISAM 表至少要快一个数量级。
  • Memory 表的大小时收到限制的,表大小取决于 max_rows 和 max_heap_table_size 两个参数的影响。其中 max_rows可以在创建表时指定;max_heap_table_size 大小默认是 16MB,可以按需进行扩大。
  • Memory 表的数据文件和索引文件分开存储(每个机遇 Memory 存储引擎的表实际对应一个磁盘文件,该文件名与表名相同,类型为 .frm 类型,该文件只存储表结构,而其数据文件都是存储在内存中的。这样有利于数据的快速处理,提高整个表的处理效率)
  • 应用场景:
    • 目标数据较小且非常频繁的访问,由于是在内存中存放数据,所以数据太大可能会造成内存溢出。
    • 如果数据是临时的,且必须立即可用,那么就可以放在内存中。
    • 存储在 Memory 表中的尽量是丢失了也没太大关系的数据。
posted @ 2024-04-08 15:57  劣技砖猿  阅读(7)  评论(0编辑  收藏  举报