只是概要地描述存储引擎
一、存储引擎的相关知识和命令
MySQL中有关于存储引擎的概念,简单说,就是指明该表的类型,不同存储引擎,在计算机的存储方式也不同。
在MySQL中可以用命令查看数据库支持的存储引擎,
命令:show engines;
查看默认的存储引擎:
命令:show variables like 'storage_engine'
查看/显示表的相关信息:SHOW TABLE STATUS LIKE ‘tb_student’ \G
二、三个比较重要的数据库存储引擎
InnoDB作为默认存储是从5.1版本开始的,之前是MyISAM,
1、InonoDB
存储引擎:
InonoDB
是MySQL数据库中一个默认
的事务型存储引擎
,它给表提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全,也是第一个提供外键约束
的。
InonoDB
存储方式:
- 创建的表的表结构存在
.frm
文件中。 - 数据和索引存储在
innodb_data_home_dir
和innodb_data_file_path
定义的表空间中。
InnoDB
采用了MVCC来支持高并发
的,并实现了四个标准的隔离级别,默认的是REPEATABLE READ (可重复读)
。
InnoDB表
是基于聚簇索引
建立的,它索引结构和MySQL的其他存储引擎有很大的不同,聚簇索引对主键查询有很高的性能
2、MyISAM
存储引擎
MyISAM
是MySQL中常见的数据库引擎,是基于ISAM
引擎发展起来的。
MyISAM提供的特性: 全文索引
、压缩
、空间函数
(GIS)、表锁
(整张表进行加锁)等。
不支持的:事务
和行级锁
。
存储方式:把表分为3个文件,文件的名称和表名相同,拓展名包含frm
、MYD
和MYI
。
- frm:存储表的结构
- MYD:存储数据,(其实MYD是MYDate的缩写)
- MYI:存储索引,(其实是MYIndex的缩写)
MyISAM的性能:
MyISAM的引擎设计简单,数据以紧密格式存储,在某些场景下的性能很好。
3、MEMEORY
存储引擎
MEMEORY
是MySQL中一类特殊的存储引擎,使用存储在内存值的内容来创建表,而且数据也是存放在内存中的,只用名称和表名相同,拓展名为frm类型来存储表结构,数据文件存储在内存中,这就造成数据已丢失的缺点。
默认的索引类型是哈希(Hash)索引 ,速度比B型树快。
三、存储引擎的比较
特性 | InnoDB |
MyISAM |
MEMORY |
---|---|---|---|
事务安全 | 支持 | 无 | 无 |
存储限制 | 64TB | 有 | 有 |
空间使用 | 高 | 低 | 低 |
内存使用 | 高 | 低 | 高 |
插入数据的速度 | 低 | 高 | 高 |
外键支持 | 支持 | 无 | 无 |
四、选择合适的引擎
其实除了前面介绍的三种存储引擎,MySQL内还支持了Archive引擎
、Blockhole引擎
、CSV引擎
、Federated引擎
、Merge引擎
、NDB集群引擎
。(后面还有对存储引擎进行深入的了解)
同时也支持以插件的形式支持第三方引擎
,第三方引擎有 Percona的XtraDB、TokuDB引擎、RethinkDB、Falcon等。
1、选用引擎
大部分情况下,InnoDB都是正确的选择,索引它作为默认的存储引擎。
有人说无脑选用InnoDB,除非你需要用到InnoDB不具备的特性,例如要用到全文索引、优先考虑的是INnoDB加上Sphinx的组合,而不是使用支持全文索引的MyISAM。
2、选用引擎的考虑因素
在选用不同的存储引擎的时候,需要考虑的因素有:
事务
——如果需要事务的支持,使用InnoDB(或者XtraDB)是最为稳定且经过沿着的选择。
——如果不需要事务的,主要是SELECT和INSERT操作,可以选择MyISAM,日志型的应用可以使用。备份
——备份也会影响到存储引擎的选择,需要在线热备份的,选择InnoDB就是基本要求。
——如果可以定期关闭服务器来执行备份,那么备份的因素可以忽略。崩溃恢复
——数据量比较大的时候,系统崩溃后如何快速恢复时一个需要考虑的问题,相对而言,MyISAM崩溃后发生损坏的概率比InnoDB要高很多,而且恢复速度点也要慢,因此即使不需要事务的支持,也要很多选用InnoDB引擎的。特有的特性
——有些应用可能依赖一些存储引擎所独有的特性或者优化,比如很多应用依赖聚簇索引的优化等。