在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响整个数据库。而在设计表的时候,我们都会关注一个问题,使用什么存储引擎。
什么是存储引擎?
关系数据库是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时却很差。而我们在实际开发过程中,就可能需要各种的表,不同的表,就意味着存储不同类型的数据,数据处理上也会存在着差异。对于mysql来说,它提供了很多类型的存储引擎,我们可以根据数据处理的需求,选择不同的存储引擎,从而最大限度的利用Mysql强大的功能。
特点 |
Myisam |
BDB |
Memory |
InnoDB |
Archive |
存储限制 |
没有 |
没有 |
有 |
64TB |
没有 |
事务安全 |
|
支持 |
|
支持 |
|
锁机制 |
表锁 |
页锁 |
表锁 |
行锁 |
行锁 |
B树索引 |
支持 |
支持 |
支持 |
支持 |
|
哈希索引 |
|
|
支持 |
支持 |
|
全文索引 |
支持 |
|
|
|
|
集群索引 |
|
|
|
支持 |
|
数据缓存 |
|
|
支持 |
支持 |
|
索引缓存 |
支持 |
|
支持 |
支持 |
|
数据可压缩 |
支持 |
|
|
|
支持 |
空间使用 |
低 |
低 |
N/A |
高 |
非常低 |
内存使用 |
低 |
低 |
中等 |
高 |
低 |
批量插入的速度 |
高 |
高 |
高 |
低 |
非常高 |
支持外键 |
|
|
|
支持 |
|
在mysql客户端中,使用以下命令可以查看Mysql支持的引擎。
SHOW ENGINES ;
MyISAM:当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表名。例如,我建立一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:
1、tb_Demo.frm,存储表定义
2、tb_Demo.MYD,存储数据
3、Tb_Demo.MYI,存储索引
MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。
MyISAM存储引擎特别适合在以下几种情况下使用:
1、选择密集型的表:MyIASM存储引擎在筛选大量数据时非常迅速,这是它最突出的有点。
2、插入密集型的表:MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理右键或web服务器日志数据。
InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据提供了一个强大的解决方案。我的电脑上安装的MySQL5.6.17版,InnoDB就是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:
1、更新密集型的表:InnoDB存储引擎特别适合处理多重并发的更新请求
2、事务:InnoDB存储引擎是支持事务的标准MySQL存储引擎
3、自动灾难恢复:与其他存储引擎不同,InnoDB表能够自动从灾难中恢复
4、外键约束:MySQL支持外键的存储引擎只有InnoDB
5、支持自动更加列AUTO_INCREMENT属性
一般来说,如果需要事务支持,丙炔有较高的并发读取频率,InnoDB是不错的选择。