1.什么是存储引擎?有什么作用?
MySQL是用来保存数据的,MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者特定的功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。
因此我们就可以把存储引擎看作是一种存储文件的方式以及该方式附属的一整套工具,其中每个存储文件方式的特点就是该存储引擎的特点。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MYSQL的核心就是存储引擎。
我们可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储信息、如何检索这些信息以及根据需要的数据的特点选择结合什么性能和功能,从而为我们提供最大的灵活性。
MySQL的存储引擎可以选择如何存储和检索你的数据,这种灵活性也是MySQL为什么如此受欢迎的主要原因。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。
2.MYSQL存储引擎都有哪些?
使用以下命令可以查看MySQL支持的引擎:
show engines;
Engine是搜索引擎的名字;
Support 显示Innodb是DEFAULT默认的;
Commnet为该存储引擎的特性,如Innodb支持事务,行级锁和外键等。
Transactions是否支持事物。
XA和Savepoints:这两个属性,与事务相关,当Transactions为Yes时,这两个属性才有意义,否则均为NO。
可以看到,在MySQL 5.7版本中,MySQL支持的存储引擎有:
- InnoDB
- MRG_MyISAM
- Memory
- Blackhole
- MyISAM
- CSV
- Archive
- PERFORMANCE_SCHEMA
- Federated
使用一下命令查看当前mysql当前默认的存储引擎:
show variables like '%engine%';
Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB。
查看Mysql版本的命令如下:
select version();
可以看到mysql当前的版本是5.7.23。
3.每个存储引擎的特点及区别?
下面介绍常用的存储引擎。
InnoDB:支持事务操作(如 begin, commit,rollback命令),支持行级锁,行级锁相对于表锁,其粒度更细,允许并发量更大。
如果要提供提交、回滚、崩溃恢复能力的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择。
在MYSQL中,只有InnoDB存储引擎才支持事务和外键引用。
InnoDB存储引擎也是MySQL 5.7版本中默认的存储引擎。
其缺点是:存储空间会占用比较大。
MyISAM:该存储引擎存储占用的空间相对与InnoDB存储引擎来说会少很多,但其支持的为表锁,其并发性能会低很多,而且不支持事务,通常只应用于只读模式的应用。
如果数据表只是用来插入和查询记录,则MyISAM引擎能提供较高的处理效率。
在MYSQL中,只有MyISAM支持全文索引。它是MySQL最原始的存储引擎。mysql5.7之后InnoDB也开始支持全文索引。
Memory:存储引擎所有的数据均保存在内存中,之前还有个名字叫做 「Heap」。
其优点是:读写快,但是数据不是持久到磁盘中的,非常容易丢失等等。
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,一些需要快速访且非关键的数据可以选择保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。
CSV:每个表会生成一个.CSV文件,将CSV类型的文件当做表进行处理。
CSV文件其实就是用逗号分隔开的文本文件,这种文件是一种普通文本文件,常用于数据转换,该类型平时用的比较少,不支持索引。
Archive:存档文件,主要用于存储很少用到的引用文件。
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息,历史数据可以使用Archive存储。
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。