MySQL使用的是插件式存储引擎。
主要包含存储引擎有:MyISAM,Innodb,NDB Cluster,Maria。Falcon,Memory,Archive。Merge。Federated。
当中最为广泛的是MyISAM 和Innodb两种存储引擎。所以接下来对它们做简单介绍。
MyISAM 存储引擎简单介绍
MyISAM 存储引擎的表存储在数据库中,每个表都被存放为三个以表名命名的物理文件。
1、(.frm文件)不论什么存储引擎都必不可少的存放表结构定义信息的文件
2、(.MYD文件)存放表数据的文件
3、(.MYI文件)存放该表全部索引数据的文件
注:有且仅有这样三个文件做为MyISAM 存储类型的表的存储
MyISAM 的表以不同的格式存放在一个同样后缀名的.MYD 文件里。
当中格式分为:静态(FIXED)固定长度、动态(DYNAMIC)可变长度以及压缩(COMPRESSED)三种格式。
压缩:能够创建表的时候通过ROW_FORMAT 来指定{COMPRESSED | DEFAULT}(默认不压缩)
也能够通过myisampack 工具来进行压缩
非压缩:
动态:只要表中有可变长度类型的字段存在,那么该表就肯定是DYNAMIC 格式的
静态:假设没有不论什么可变长度的字段,则为FIXED 格式
MyISAM 支持下面三种类型的索引:
1、B-Tree 索引
B-Tree 索引,全部的索引节点都依照balance tree 的数据结构来存储。全部的索引数据节点都在叶节点。
2、R-Tree 索引
R-Tree 索引的存储方式和b-tree 索引有一些差别。主要设计用于为存储空间和多维数据的字段做索引,支持geometry 类型的字段作索引。
3、Full-text 索引
Full-text 索引就是我们长说的全文索引。他的存储结构也是b-tree。主要是为了解决在我们须要用like 查询的低效问题。
注:參与一个索引的全部字段的长度之和不能超过1000 字节
Innodb 存储引擎简单介绍
1、支持事务安装
实现了SQL92 标准所定义的全部四个级别(READ UNCOMMITTED,READ COMMITTED。REPEATABLE READ 和SERIALIZABLE)
2、数据多版本号读取
Innodb 在事务支持的同一时候,为了保证数据的一致性已经并发时候的性能,通过对undo信息。实现了数据的多版本号读取。
3、锁定机制的改进
Innodb 改变了MyISAM 的锁机制,实现了行锁。行锁机制的实现是通过索引来完毕的。
4、实现外键
建议不要使用外键,数据库系统调优专家都建议不要使用
5、Innodb 的物理结构
跟MyISAM一样:(.frm 文件)来存放表结构定义相关的元数据。
跟MyISAM不一样:表数据和索引数据是存放在一起的
Innodb 的物理结构分为两大部分:
1、数据文件(表数据和索引数据)
存放数据表中的数据和全部的索引数据。包含主键和其它普通索引。
Innodb 的表空间分为两种形式:
一种是共享表空间,也就是全部表和索引数据被存放在同一个表空间(一个或多个数据文件)中,
通过innodb_data_file_path 来指定,添加数据文件须要停机重新启动。
第二种是独享表空间,也就是每个表的数据和索引被存放在一个单独的.ibd 文件里。
注:共享表空间是必须存在的,由于Innodb 的undo 信息和其它一些元数据信息都是存放在共享表空间里面的。
共享表空间的数据文件是能够设置为固定大小和可自己主动扩展大小两种形式,
自己主动扩展形式的文件能够设置文件的最大大小和每次扩展量。
2、日志文件
Innodb 的日志文件和Oracle 的redo 日志比較相似:
能够设置多个日志组(最少2个)。
採用轮循策略来顺序的写入,
甚至在老版本号中还有和Oracle 一样的日志归档特性。
注:千万别全部删除innodb 的日志文件。由于非常可能就会让你的数据库crash,无法启动。或者是丢失数据。
Innodb 全然能够通过redo 日志将数据库Crash 时刻已经完毕但还没有来得及将数据写入磁盘的事务恢复,也能够将全部
部分完毕并已经写入磁盘的未完毕事务回滚并将数据还原。
Innodb 的全部參数基本上都带有前缀“innodb_”。
能够只通过參数(skip-innodb)来屏蔽MySQL 中的Innodb存储引擎。
这样即使我们在安装编译的时候将Innodb 存储引擎安装进去了。使用者也无法创建Innodb 的表。