在讲存储引擎以前咱们来作个比喻 : 现实生活中咱们咱们存储的数据文件有不一样的类型, 每种文件类型对应各自不一样的处理机制css
好比一个视屏文件,能够转换成mp四、avi、wmv, 一个图片能够是png、jpgnode
咱们电脑的磁盘上也会存在不一样类型的文件系统, Windows里常见的ntfs、fat32,Linux里常见的ext三、ext四、xfs等python
数据库中的表也应该有不一样的类型, 表的类型不一样, 会对应mysql不一样的存取机制, 表类型又称为存储引擎mysql
如同上面的比喻, 虽然一个视频文件的类型不同, 可是呈现的内容都是同样的sql
表数据也是这样, 一张表的数据不管使用什么存储引擎, 用户能看到的数据是同样的, 不一样的储引擎存取, 引擎功能, 占用空间大小, 读取性能等可能有区别数据库
说白了, 存储引擎就是在如何存储数据、提取数据、更新数据等技术方法的实现上, 底层的实现方式不一样, 那么就会呈现出不一样存储引擎有着一些本身独有的特色和功能, 对应着不一样的存取机制缓存
因而乎, 用户在使用的时候根据本身不一样的业务场景选择不一样的存储引擎, 其中MySQL最经常使用的存储引擎为:MyISAM和InnoDB (下面详细介绍)安全
ps : 在Oracle 和SQL Server等数据库中只有一种存储引擎,全部数据存储管理机制都是同样的架构
t01.frm # 存放的是表结构 t01.idb # 存放的是 索引 + 数据
t01.frm # 表结构 t01.MYD # MyDaata 存放的是数据 t01.MYI # MyIndex 存放的是索引
t01.frm # 表结构
delete from table
时,InnoDB不会从新创建表,而是一行一行的删除,在innodb上若是要清空保存有大量数据的表,最好使用truncate table
这个命令2003 年,MySQL AB 公司从 Sony Ericsson 公司收购了 NDB 存储引擎。 NDB 存储引擎是一个集群存储引擎,相似于 Oracle 的 RAC 集群,不过与 Oracle RAC 的 share everything 结构不一样的是,其结构是 share nothing 的集群架构,所以能提供更高级别的 高可用性。NDB 存储引擎的特色是数据所有放在内存中(从 5.1 版本开始,能够将非索引数 据放在磁盘上),所以主键查找(primary key lookups)的速度极快,而且可以在线添加 NDB 数据存储节点(data node)以便线性地提升数据库性能。因而可知,NDB 存储引擎是高可用、 高性能、高可扩展性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。性能
第三方的存储引擎。其特色是存储是按照列而非行的,所以很是 适合 OLAP 的数据库应用。其官方网站是 http://www.infobright.org/,上面有很多成功的数据 仓库案例可供分析。
网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性,不久的未来会实现面向内存的事务支持。
ps : Mysql 支持的存储引擎很是多, 上面只是常见存储引擎, 还支持自定义, 也就是本身写一个
show engines; # 查看安装的mysql全部支持的存储引擎 show variables like 'storage_engine%'; # 查看当前正在使用的存储引擎
create table innodb_t01(id int) engine=innodb; # 末尾指定InnoDB存储引擎 create table myisam_t02(id int) engine=myisam; # 指定MyISAM存储引擎 create table memory_t03(id int) engine=memory; # 指定memory存储引擎 create table blackhole_t04(id int) engine=blackhole; # 指定Blackhole存储引擎
insert into innodb_t01 values(1),(2); # 插入 ID 1 和 2 ,下同 insert into myisam_t02 values(1),(2); insert into memory_t03 values(1),(2); insert into blackhole_t04 values(1),(2);
select * from innodb_t01; select * from myisam_t02; select * from memory_t03; select * from blackhole_t04; # 注意 : 黑洞
结论 : 对于blackhole类型的表, 往表内插入任何数据, 都至关于丢入黑洞, 表内永远不存记录
结论 : 对于memory类型的表,在重启mysql或者重启机器后,表内数据清空
下一篇将详细介绍表的操做