MySQL学习——存储引擎
摘要:本文主要学习了MySQL数据库的存储引擎。
什么是存储引擎
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。
存储引擎的种类
InnoDB事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。在5.5.5之后,InnoDB作为默认存储引擎。
MyISAM是基于ISAM的存储引擎,并对其进行扩展,是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。
MEMORY存储引擎将表中的数据存储到内存中,为查询和引用其他数据提供快速访问。
MySQL的存储引擎
MySQL支持多种类型的数据库引擎,可分别根据各个引擎的功能和特性为不同的数据库处理任务提供各自不同的适应性和灵活性。
MySQL提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。
在MySQL中,可以使用 show engines;
1 mysql> show engines;
2 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
3 | Engine | Support | Comment | Transactions | XA | Savepoints |
4 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
5 | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
6 | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
7 | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
8 | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
9 | CSV | YES | CSV storage engine | NO | NO | NO |
10 | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
11 | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
12 | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
13 | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
14 +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
15 9 rows in set (0.00 sec)
16
17 mysql>
Support列的值表示引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。
选择存储引擎
为了做出选择,首先要考虑每一个存储引擎提供了哪些不同的功能。不同的存储引擎都有各自的特点,以适应不同的需求,如表所示:
可以根据以下的原则来选择MySQL存储引擎:
1)如果要提供提交、回滚和恢复的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个很好的选择。
2)如果数据表主要用来插入和查询记录,则MyISAM引擎提供较高的处理效率。
3)如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的MEMORY引擎中,MySQL中使用该引擎作为临时表,存放查询的中间结果。
4)如果只有insert和select操作,可以选择Archive引擎,Archive存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive存储引擎非常适合存储归档数据,如记录日志信息可以使用Archive引擎。
提示:使用哪一种引擎要根据需要灵活选择,一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。使用合适的存储引擎将会提高整个数据库的性能。