MySql体系

先来看一下MySql的架构图:

二、MySql存储引擎简介(笔记)-LMLPHP

MySql的存储引擎在架构的最下层,提供了各式各样的存储特性,下面介绍几个常用的存储引擎。

MyISAM

官方提供的一个存储引擎,在数据库的系统表和系统生成的临时表,有时会用到该存储引擎。

存储方式

  • table.MYD:数据文件;
  • table.MYI:索引文件;
  • table.frm:结构文件;

特性

  • 表级锁,查询时使用共享锁,修改时使用独占锁;
  • 修复时,使用check table xxx 和 repair table xxx;
  • 索引,在5.7之前为数不多的支持全文索引(Text和Blob前500个字符)和空间函数的存储引擎;
  • 支持压缩,使用mysiampack压缩,会产生一个xxx.OLD文件,压缩后表为只读模式;

限制

mysql5.0之前,单表大小默认不能超过4G,可以用max_rows和avg_row_length修改。5.0以后的版本单表支持256TB。

使用场景

  • 非事务OLAP应用,因为MYISAM不支持事务;
  • 只读应用,因为压缩后是只读模式,但是会节约磁盘空间;
  • 空间应用,5.7前唯一支持空间函数的存储引擎;

InnoDB

数据

结构还是存储在.frm文件中,但innoDB有自己的表空间,以.idb结尾,也可以使用系统表空间,但是不方便进行文件收缩,而且使用系统表空间,在多表操作时会有I/O瓶颈。

特性

支持事务,由redo log和undo log实现,redo log提供了内存缓冲区和内存日子文件,以顺序写的方式执行提交的事务,undo log提供了回滚与MVCC功能

支持行级锁,写操作时的锁定范围更少,提高了并发能力。

innodb还提供了状态检查,使用 show engine innodo status 查看最近N秒的服务器状态。

使用场景

  • 使用大多的OLTP应用;
  • 5.7后也有了全文索引和空间函数;
  • 是非常常用的一种存储引擎,也是mysql现在默认的存储引擎了;

CSV

数据

以.csv文件存储数据,.csm文件存储表状态,.frm存储结构;

特性

  • 所有列不能为空;
  • 不支持索引;
  • 可直接编辑文件内容,内容以“aa”,"bb"格式存储在.csv文件中;

场景

可以用于数据交换,当作中间表使用。

Archive

数据

  • 以zlib存储数据,会对数据进行压缩,比例很高;
  • 以.ARZ文件存储;

特点

  • 只支持insert和select;
  • 可以在自增列上创建索引;

场景

  • 适合保存日志;
  • 适合数据采集类应用;

Memary

数据

也叫HEAP,数据保存在内存中,文件只有一个.frm文件,保存结构。

特点

  • 支持HASH和BTree索引,Hash用作等值,BTree用作范围;
  • 所有字段都是固定长度的;
  • 不支持BLOG和TEXT;
  • 使用了表级锁;
  • 表大小由max_heap_table_size决定;

场景

  • 映射表;
  • 分析数据用的中间表;
  • 缓存周期性数据;
10-23 04:12