MySQL 数据库开发入门(四):MySQL 的数据引擎
存储引擎是指定在表上面的,每个表都可以指定其自己的引擎;不管使用什么存储引擎,都会产生一个后缀为 frm 的文件,改用来定义表结构。
1、MySQL 的存储引擎介绍
主要有以下 5 种存储引擎:
<table><tbody><tr><td><p>序号</p></td><td><p>存储引擎名称</p></td><td><p>存储引擎特点</p></td></tr><tr><td><p>1</p></td><td><p>MyISAM</p></td><td><p>Mysql5.5 版本之前的默认存储引擎</p></td></tr><tr><td><p>2</p></td><td><p>InnoDB</p></td><td><p>Mysql5.5 及以后版本的默认存储引擎,目前用得最多的一个存储引擎</p></td></tr><tr><td><p>3</p></td><td><p>CSV</p></td><td><p>数据存储以 CSV 文件,不适用大表或者数据的在线处理,适用于数据的快速导入与导出</p></td></tr><tr><td><p>4</p></td><td><p>Memory</p></td><td><p>数据都是存储在内存中,服务重启数据丢失,默认 16M 空间,可用于查询结果内存计算,创建临时表存储需要计算的数据</p></td></tr><tr><td><p>5</p></td><td><p>Archive</p></td><td><p>数据存储为 ARZ 文件格式,只支持 insert 和 select 两种操作,可用于数据备份</p></td></tr></tbody></table>
2、MyISAM 与 InnoDB 引擎的区别
Mysql5.5 版本之前默认的存储引擎就是 MyISAM 存储引擎,MySQL 中比较多的系统表使用 MyISAM 存储引擎,系统临时表也会用到 MyISAM 存储引擎,但是在 Mysql5.5 之后默认的存储引擎就是 InnoDB 存储引擎了。原因主要是 MyISAM 是表级锁定,限制了数据库读/写的性能;另外一个原因 MyISAM 不支持事务,基于以上两点,InnoDB 引擎使用得非常广泛。
MyISAM 与 InnoDB 引擎主要有以下 6 个方面的区别:
<table><tbody><tr><td><p>序号</p></td><td><p>对比</p></td><td><p>InnoDB</p></td><td><p>MyISAM</p></td></tr><tr><td><p>1</p></td><td><p>文件存储方式</p></td><td><p>.frm 表定义文件;.ibd 数据文件</p></td><td><p>.frm 表定义文件;.myd 数据文件;.myi 索引文件</p></td></tr><tr><td><p>2</p></td><td><p>索引方式</p></td>
<td><p>B+ Tree</p></td><td><p>B+ Tree</p></td></tr><tr><td><p>3</p></td><td><p>count(*) 操作</p></td><td><p>全表扫描</p></td><td><p>无需扫描</p></td></tr><tr><td><p>4</p></td><td><p>锁机制</p></td><td><p>表锁、 行锁</p></td><td><p>表锁</p></td></tr><tr><td><p>5</p></td><td><p>事务</p></td><td><p>支持事务的 ACID</p></td><td><p>不支持事务</p></td></tr><tr><td><p>6</p></td><td><p>常用场景</p></td><td><p>读写操作</p></td><td><p>读多写少操作,比如配置表</p></td></tr></tbody></table>
3、数据文件存放路径
-- 查看数据存储的文件路径
show variables like 'datadir';
4、InnoDB 逻辑存储结构
MySQL 的存储结构分为 5 级:表空间、段、簇、页、行。
**表空间(TableSpace):**表空间可以看做是 InnoDB 存储引擎逻辑结构的存储结构的大容器,所有的数据都存放在表空间中,分为:系统表空间、独占表空间、通用表空间、临时表空间、Undo 表空间。
**段(Segment):**表空间是由各个段组成的,分为:数据段、索引段、回滚段等,段是一个逻辑的概念,一个 .ibd 文件(独立表空间文件)里面会由很多个段组成。创建一个索引会创建两个段,一个是索引段(leaf node segment),索引段管理非叶子节点的关键字和引用数据;一个是数据段:(non-leaf node segment),数据段管理叶子节点的行记录数据。
评论