一、什么是存储引擎?
存储引擎是MySQL中基于表提供的访问文件的一种机制。对于MySQL来说,它提供了多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。
二、分类
InnoDB存储引擎
①是windows下MySQL数据库默认的存储引擎。
②支持事务、支持行锁、支持事务安全表(ACID)。
③支持外键,在存储表中的数据时,每张表都是按照主键的顺序进行存方放,如果在定义表时没有指定主键,则InnoDB会为每一行生成一个6字节的rowid,并以此作为主键。
④不支持全文索引。
注:行锁-》有前提,只有出现在以索引的方式查找时,进行行锁。对于非索引项(当where条件没有加主键时)加的依旧是表锁。
★适合于需要事务支持、外键约束、自动灾难恢复、大量updata的表中。
MyISAM存储引擎
①是Linux下MySQL数据库默认的存储引擎。
②支持全文索引、表锁、压缩表、空间数据索引。
③不支持事务、不支持外键。
④当我们建立一个MyISAM引擎的表时,本地磁盘会生成三个文件。分别为:
表名.FRM:用来存储建表的信息
数据文件名.MYD:存储数据(MYData)
索引文件名.MYI:存储索引(MYIndex)
注:表锁-》如果现在要进行select操作,系统默认就会加读锁。
***********************************************
* 读锁:指不允许外界进行write操作。 *
* 写锁:指不允许外界进行read和write操作。 *
***********************************************
★适合在选择密集型(筛选速度快)和插入密集型(允许同时插入)的表中使用。
MEMORY存储引擎
①要求存储在MEMORY数据库表里的数据使用的长度是不变的,所以不支持test、blob字段。
②数据存放在内存中,速度快。
★适合存放临时表、目标数据小且被频繁使用的表。
ARCHIVE存储引擎
①archive是归档的意思,只支持select和insert。
★压缩型,有很好的压缩机制,使用了zlib压缩库,在记录被请求时会实时压缩,经常用来当仓库使用。适用于日志文件。
三、总结
针对每个存储引擎其特点对比如下:
功能 / 存储引擎类型 | InnoDB | MyISAM | MEMORY | ARCHIVE |
存储限制 | 64TB | 256TB | RAM | none |
支持事务 | yes | no | no | no |
支持全文索引 | no | yes | no | no |
支持数索引 | yes | yes | yes | no |
支持哈希索引 | no | no | yes | no |
支持数据缓存 | yes | no | N/A | no |
支持外键 | yes | no | no | no |
不同的存储引擎有不同的特点,在选择存储引擎时,应该根据需求,使用合适的存储引擎,从而提高整个数据库的性能。