十六、MySQL基础系列笔记之数据表存储引擎的介绍

作者: 温新

分类: 【MySql】

阅读: 1982

时间: 2020-10-19 14:53:46

MySQL存储引擎概述

MySQL默认支持多种存储引擎,以适用于不同领域的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率。

MySQL支持的存储引擎包括:InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、ARCHIVE、MERGE、FEDERATED、EXAMPLE、NDB等,其中InnoDB和NDB提供失误安全表,其他存储引擎都是非失误安全表。

创建表时若不选择存储引擎,那么系统就会使用默认的存储引擎。MySQL5.5之前的默认存储引擎是MyISAM,5.5之后改为InnoDB.

查看当前默认存储引擎

show variables like 'default_storage_engine';

查看当前数据库支持的存储引擎

show engines;

各存储引擎特性

说明:留空则为不支持

特点 MyISAM Memory InnoDB Archive NDB
B树索引 支持 支持 支持
备份/时间点恢复 支持 支持 支持 支持 支持
支持集群 支持
聚簇索引 支持
数据压缩 支持 支持 支持
数据缓存 N/A 支持 支持
数据加密 支持 支持 支持 支持 支持
支持外键 支持 支持
全文索引 支持 支持
地理坐标数据类型 支持 支持 支持 支持
地理坐标索引 支持 支持
哈希索引 支持 支持
索引缓存 支持 N/A 支持 支持
锁粒度 表级 表级 行级 行级 行级
MVCC多版本控制 支持
支持复制 支持 有限支持 支持 支持 支持
存储限制 256TB RAM 64TB None 384EB
T树索引 支持
支持事务 支持 支持
统计信息 支持 支持 支持 支持 支持

MySQL常用的存储引擎有MyISAM、InnoDB、MEMORY、Archive。下面也将记录这4种引擎。

常用的存储引擎

MyISAM

MyISAM不支持事务也不支持外键。MyISAM在某些场景中相对InnoDB的访问速度有明显的优势;对事务完整性没有要求或者以SELECT、INSERT为主的应用可以使用InnnoDB引擎。

**每个MyISAM在磁盘上存储成3个文件,其文件名与表名相同,但扩展名不同,**如下:

  • .frm(存储表定义)
  • .MYD(MYData,存储数据)
  • .MYI(MYIndex,存储索引)

数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度。

MyISAM的表还支持3种不同的存储格式,如下:

  • 静态(固定长度)表
  • 动态表
  • 压缩表

静态表是默认的存储格式。静态表中的字段都是非变长字段,这样每个记录都是固定长度的,这种存储方式的优点是:存储非常迅速、容易缓存、出现故障容易恢复;缺点是:占用的空间通常比动态表多。

动态表中包含包含变长字段,记录不是固定长度的,优点是:占用的空间相对较少;缺点是:频繁的更新和记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk-r命令来改善性能,且在出现故障时恢复相对比较困难。

压缩表由myisampack工具创建,优点是占用磁盘空间非常小。

InnoDB

InnoDB具有提交、回滚和崩溃恢复能力的事务安全保障,同时提供了更小的锁粒度和更强的并发能力,拥有自己独立的缓存和日志。

对比MyISAM存储引擎,InnoDB会占用更多的磁盘空间以保留数据和索引。

自动增长列

InnoDB表的自动增长列可以手工插入,若插入的值为空,则实际插入的将是自动增长后的值。

外键约束

Mysql支持外键的常用存储引擎只有InnoDB,在创建外键时,要求父表必须有对应的索引,子表在创建时也会自动创建对应的索引。

主键和索引

InnoDB的数据文件是以聚簇索引的形式保存,这个聚簇索引也被称为主索引且也是InnoDB的主键,InnoDB表第行数据都保存在主索引的叶子节点上。

存储方式

InnoDB存储表和索引有2种存储方式:使用共享表空间存储和使用多表空间存储。

MEMORY

MEMORY存储引擎使用存在于内存中的内容来创建表。

每个MEMORY表对应一个磁盘文件,格式为.frm;由于存储在内存中,MEMORY类型的表访问速度非常快,一旦服务关闭,表中数据则丢失。

MERGE

MERGE存储引擎被称为MRG_MyISAM,是一组MyISAM表的组合。这些MyISAM表的结构必须完全相同,Merge表本身并没有数据,对MERGE类型的表可能进行查、改、删操作。

2020-10-19

请登录后再评论