Mysql存储引擎

本文最后修改于 208 天前,部分内容可能已经过时!

0d2070e8f84c4801adbfa03bda1f98d9.png
总体来说,MySQL可分为Server层和存储引擎层。
Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
而存储引擎层负责数据的存储和提取。

功能

•数据读写
•数据安全
•提高性能
•热备份
•自动故障恢复
•高可用方面支持

种类

•InnoDB

支持事务,主要面向在线事务(OLTP)处理的应用;
行锁设计,支持外键,支持类似于Oracle的非锁定读;
从5.5.8版本开始,InnoDB存储引擎是默认的存储引擎;
将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由InnoDB存储引擎自身进行管理;

•MyISAM

不支持事务,表锁设计,支持全文索引,主要面向OLAP数据库应用;
它的缓冲池只缓存索引文件,不缓存数据文件;
MyISAM存储引擎表由 MYD 和 MYI 组成,MYD用来存放数据文件,MYI用来存放索引文件;

•MEMORY

在内存中存储所有数据,应⽤于对⾮关键数据由快速查找的场景; 
Memory类型的表访问数据⾮常快,因为它的数据是存放在内存中的,并且默认使⽤HASH索引,但 
是⼀旦服务关闭,表中的数据就会丢失; 
应⽤场景:快速定位记录;   

•ARCHIVE

Archive存储引擎只⽀持INSERT和SELECT操作,从5.1开始⽀持索引; 
使⽤zlib算法将数据⾏进⾏压缩后存储,压缩⽐⼀般可达1:10; 
⾮常适合存储归档数据,如⽇志信息; 
使⽤⾏锁来实现⾼并发的插⼊操作,但是其本身并不是事务安全的存储引擎,其设计主要⽬标是提 
供告诉的插⼊和压缩功能;

•FEDERATED

Federated存储引擎表并不存放数据,它只是指向⼀台远程MySQL数据库服务器上的表。这⾮常类似 
于 SQLServer的链接服务器和Oracle的透明⽹关,不同的是它只⽀持MySQL数据库表,不⽀持异构 
数据库表; 

•EXAMPLE

这种存储引擎⽤以保存阐明如何开始写新的存储引擎的 MySql 源码的例⼦。它主要针对于有兴趣 
的开发⼈员。这种存储引擎就是⼀个啥事也不做的 "存根"。你可以使⽤这种引擎创建表,但是你 
⽆法向其保存任何数据,也⽆法从它们检索任何索引; 

•BLACKHOLE

⿊洞存储引擎,类似于 Unix 的 /dev/null,Archive 只接收但却并不保存数据。对这种引擎的 
表的查询常常返回⼀个空集。这种表可以应⽤于 DML 语句需要发送到从服务器,但主服务器并不 
会保留这种数据的备份的主从配置中。

•MERGE

允许 MySql DBA 或开发者将⼀系列相同的 MyISAM 表进⾏分组,并把它们作为⼀个对象进⾏引 
⽤。适⽤于超⼤规模数据场景,如数据仓库;

•NDBCLUSTER

是⼀个集群存储引擎,类似于Oracle的RAC集群,不过其结构与Oracle的share everything不同 
的是,它使⽤的是share nothing的集群结构,可以提供更⾼的可⽤性; 
数据全部放在内存中(从5.1版本开始,可以将⾮索引数据放在磁盘上)因此主键查找的速度极 
快,并且通过添加NDB数据存储节点可以线性地提⾼数据库性能,是⾼可⽤、⾼性能的集群系统; 
其连接操作是在数据库层完成的,⽽不是在存储引擎层完成的。这意味着,复杂的连接操作需要巨 
⼤的⽹络开销,因此查询速度很慢;

•CSV

它的表真的是以逗号分隔的⽂本⽂件。CSV 表允许你以 CSV 格式导⼊导出数据,以相同的读和写 
的格式和脚本和 应⽤交互数据。由于 CSV 表没有索引,你Y好是在普通操作中将数据放在 InnoDB 
表⾥,只有在导⼊或导出阶段使⽤⼀下 CSV 表;

•Maria存储引擎

新开发的引擎,设计主要⽬标是⽤来取代原来的MyISAM存储引擎,从⽽成为MySQL的默认存储引 
擎; 
⽀持缓存数据和索引⽂件,应⽤了⾏锁设计,提供了MVCC功能,⽀持事务和⾮事务安全的选 项,以 
及更好的BLOB字符类型的处理性能。

存储引擎相关操作

查看存储引擎

 MariaDB [(none)]> show engines;

查看默认存储引擎

 MariaDB [(none)]> select @@default_storage_engine;

修改存储引擎

#在建表时指定
 MariaDB [(none)]> create table student(id int,name char(20))  engine=MyISAM;
#修改表时更改
 MariaDB [(none)]> alter table student engine=InnoDB;
#在配置文件中更改
vim /etc/my.cnf
...
[mysqld]
default-storage-engine=InnoDB
...
Tags:Mysql数据库
上一篇
下一篇

添加新评论