mysql存储引擎

1125 查看

查看mysql支持的存储引擎列表

mysql> show engines\G;
*************************** 1. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
..........
..........

Innodb(事务安全型的存储引擎,更加注重数据的完整性和安全性)

\>= 5.5 默认的存储引擎,mysql推荐使用的存储引擎
特点:提供事务,行级锁定,外键约束支持的存储引擎

存储格式

数据,索引集中存储,都存储与同一个表空间文件
数据=记录行
索引=检索机制,也需要占用一定空间

.frm文件,表结构文件
innodb_xxx_.frm

默认情况下,mysql中所有的数据行,全部存储在innodb表的表空间文件中
innode,表空间内容(数据和索引)

通过设置临时设置innodb_file_per_table = 1设置为,每张表都为一个innodb表空间文件
\>= set global innodb_file_per_table = 1
设置完成后,新建一张表,生成如下两个文件
innodb_1.frm 单表结构文件
innodb_1.ibd 单表空间文件

数据按照主键顺序存储

在一张主键ID自增的表中,随意设置主键列值,查询时得出的结果是经过mysql排序的
也就是说,mysql在插入的时候会做排序工作,把表中数据先主键排序后再插入,效率低

特定功能

下面两个功能都是维数数据完整性
事务:
外键约束:php开发人员,需要自己去实现外键约束功能,例如,删除一个分类,php开发人员自己先去查询,该分类下是否存在子分类功能

并发处理

innodb擅长处理并发,因为如下功能支持
行级锁定:row-level locking , 某些情况下,使用行级锁定,提高并发性,也支持表级锁定,innodb自己可以操作,无需人为参与
多版本并发控制:mvcc,效果几乎达到无阻塞读操作,写操作的时候,写副本,原始版本供其他客户端读


读锁:读操作时增加锁,叫共享锁,S-lock特征是阻塞其他客户端的写操作,不阻塞读操作
写锁:写操作时增加锁,叫独占锁或排他锁,X-lock特征是阻塞其他客户端的读、写操作

锁定粒度(范围)
行级:提升并发性,锁定开销大
表级:不利于并发性,锁定开销小

myisam

\<= 5.5 mysql默认的存储引擎
isam:Indexed Sequential Access Method(索引顺序存取方法)的缩写 ,是一种文件系统
特点:擅长处理些,高速读与写。

存储格式

数据、索引、结构分别存储于不同的文件中
myisam_xxx.frm 结构
myisam_xxx.MYD 数据
myisam_xxx.MYI 索引

数据的存储顺序为,按插入顺序排列

特定功能

全文索引支持。(>= 5.6 innodb支持)
数据压缩存储。.MYD文件的压缩存储。
压缩前

压缩:使用工具myisampack完成压缩功能,在bin目中
压缩后(由于我的win平台的mysql的bin目录没有这个工具,暂先文字描述),压缩一半以上,MYD会被压缩,MYI不会被压缩,节省磁盘空间,减少I/O开销
注意,压缩后,表只能读,不能写,要写的话,需要重新恢复。
如果需要更新,需要解压后更新,再压缩(重新索引)
利用工具解压缩:myisamchk -unpack 表名
再执行刷新表:flush table 表名

并发性
只支持表级锁定
支持并发插入,写操作中的插入操作,不会阻塞读操作

myisam
innodb:数据完整性,并发性处理,擅长更新,删除
myisam:高速查询及插入。擅长插入,查询