详解数据库存储引擎

来源:互联网 发布:程序员的修炼之道 pdf 编辑:程序博客网 时间:2024/06/06 16:25
Mysql中插件式存储引擎一直都是其非常有特色的亮点,其灵活的处理方式,高度可定制化及完全开放的实现一直被很多用户所肯定。
存储引擎说明白点就是数据的处理方式和数据的存储方式
主流的插件式存储引擎主要有以下几种:
MyISAM,InnoDB,NDB Cluster,Merge,Archive,Federated


MyISAM:是Mysql默认的存储引擎,也是目前Mysql使用非常广泛的存储引擎之一。拥有较高的插入,查询速度,但不支持事务。
MyISAM存储引擎的每一个表都被存放在三个以表名命名的物理文件。首先肯定会有任何存储引擎都不可缺少的存放表结构定义信息的.frm文件,另外还有.MYD(表数据).MYI(索引数据)。
MyISAM支持一下三种索引类型。B-Tree,R-Tree,Full-text,B-Tree索引是用的最多的,就是所有的索引节点都按照balance tree的数据结构来存储,所有的索引数据节点都在叶节点。
MyISAM存储引擎是表级锁定。




InnoDB:
5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定。
支持事务安全,数据多版本读取,锁定机制的改进,实现外键。
物理结构:数据文件(表数据和索引数据),日志文件




NDB Cluster:存储引擎主要用于Mysql Cluster分布式集群环境,就是在无共享存储设备的情况下实现的一种内存数据库Cluster环境,主要是通过NDB Cluster存储引擎来实现的。
高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
   
Merge :将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用


Archive:非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差


Federated: 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用。


数据库引擎区别(MyIsam 和 InnoDB)
1.  InnoDB 不支持 FULLTEXT 类型的索引。
2.  InnoDB 中不保存表的具体行数,也就是说,执行 select count(*) from table 时,InnoDB 要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count(*)语句包含where 条件时,两种表的操作是一样的。
3.  对于 AUTO_INCREMENT 类型的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中,可以和其他字段一起建立联合索引。
4.  DELETE FROM table 时,InnoDB 不会重新建立表,而是一行一行的删除。
5.  LOAD TABLE FROM MASTER 操作对 InnoDB 是不起作用的,解决方法是首先把 InnoDB 表改成 MyISAM
表,导入数据后再改成 InnoDB 表,但是对于使用的额外的 InnoDB 特性(例如外键)的表不适用。