首页 > 代码库 > MySql 存储引擎
MySql 存储引擎
博客园已开通有一段时间,一直有想写博客的想法,但苦于文笔及没有系统的知识分享,第一篇博客一直拖到现在。
开发人员对数据库一定不陌生,但是现在的各种ORM框架使得我们不太关注数据库方面的知识储备。今天我就从数据库原理来分享最近学到的一些知识。
博客除分享所学外,更重要的是给自己知识的巩固。如果有不对的地方还请指正,拍砖。
1、引言
MySQL 数据库独有的插件式体系结构,存储引擎是MySQL区别于其他数据库的一个最重要特性。存储引擎的好处是,每个存储引擎都有各自的特点,可以根据具体的应用建立不同存储引擎表。
由于 MySQL 数据库开源特性,存储引擎可以分为2类:
第一类:MySQL 官方存储引擎
第二类:第三方存储引擎 如:InnoDB
2、各存储引擎介绍
2.1 InnoDB 存储引擎
InnoDB 存储引擎支持事务,设计主要面向在线事务处理 (OLTP) 的应用。特点是 行锁设计、支持外键、并支持类似于 Oracle 的非锁定读,默认读取操作不会产生锁。从 MySQL 数据库 5.5.8 版本开始,InnoDB 存储引擎是的存储引擎。
InnoDB 存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由 InnoDB 存储引擎自身管理。可以将每个 InnoDB 存储引擎的表单独放到一个独立的 idb 文件中。
InnoDB 通过使用多版本并发控制 (MVCC) 来获得高并发性,并且实现了 SQL 标准的4种隔离级别,黑夜为 REPEATABLE 级别。 InnoDB 存储引擎还提供了插入缓冲 、二次写、自适应哈希索引、预读等高性能和高可用功能
对于表中数据的存储,InnoDB 存储引擎采用了聚焦 (clustered) 的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显示地在表定义时指定主键, InnoDB 存储引擎会为每一行生成一个 6 字节的 ROWID, 并以此作为主键。
2.2 MyISAM 存储引擎
MyISAM 存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些 OLAP 数据库应用。数据库系统与文件系统很大的一个不同之处在于对事务的支持,然而MyISAM 存储引擎是不支持事务的。
MyISAM 存储引擎的另一个不同地方是它的缓冲池只缓存 (cache) 索引文件,而不缓冲数据文件,这点与大多数的数据库都不同
MyISAM 存储引擎表由 MYD 和 MYI 组成,MYD 用来存放数据文件, MYI 用来存放索引文件。可以通过使用 myisampack 工具来进一步压缩数据,因此使用 myisampack 工具压缩后的表是只读的,也可以用 myisampack 来解压数据文件。
在 MySQL 5.0 版本之前, MyISAM 默认支持的表大小为 4GB,如果需要支持大于4G,需要制定 MAX_ROWS 和 AVG_ROW_LENGTH属性。从5.0版本开始,默认支持256TB的单表数据。
2.3 NDB 存储引擎
NDB 存储引擎是一个集群存储引擎,类似于 Oracle 的RAC集群,与之不同的是,其结构是 share nothing 的集群架构,因此能提供更高的可用性。
特点:a. 数据全部放在内存中,因此主键查找速度极快,并且通过加NDB 数据存储节点可以线性地提高数据库性能,是高可用、高性能的集群系统。
注意:NDB 存储引擎的连接操作 (JOIN) 是在 MySQL 数据库层完成的, 不是在存储引擎层完成。意味着复杂的连接操作需要巨大的网络开销,因此查询速度很慢。
其他存储引擎这里就不一一介绍,有兴趣的童鞋可以通过 MySQL 技术内幕 中了解
总结:每种存储引擎的实现都不相同,MYSQL 数据的设计思想和存储引擎的关系需要数据库设计者权衡。
查看当前MYSQL 数据库所支持的存储引擎命令: show engings
MySql 存储引擎
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。