MySql 存储引擎

博客园已开通有一段时间,一直有想写博客的想法,但苦于文笔及没有系统的知识分享,第一篇博客一直拖到如今。数据库

开发人员对数据库必定不陌生,可是如今的各类ORM框架使得咱们不太关注数据库方面的知识储备。今天我就从数据库原理来分享最近学到的一些知识。缓存

博客除分享所学外,更重要的是给本身知识的巩固。若是有不对的地方还请指正,拍砖。网络

一、引言

     MySQL 数据库独有的插件式体系结构,存储引擎是MySQL区别于其余数据库的一个最重要特性。存储引擎的好处是,每一个存储引擎都有各自的特色,能够根据具体的应用创建不一样存储引擎表。架构

     因为 MySQL 数据库开源特性,存储引擎能够分为2类:
     第一类:MySQL 官方存储引擎
     第二类:第三方存储引擎 如:InnoDB
 
  二、各存储引擎介绍
     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
相关文章
相关标签/搜索