数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。
现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。
有哪些存储引擎
MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。
MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。可以使用SHOW ENGINES;语句查看系统所支持的引擎类型以及引擎是否支持事务等。
Support 列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。
下面简要描写几种存储引擎,后面会对其中的几种(主要是 InnoDB 和 MyISAM )进行详细讲解。
MySQL如何查看和修改默认存储引擎
如果需要操作默认存储引擎,首先需要查看默认存储引擎,如下:SHOW VARIABLES LIKE 'default_storage_engine%';
修改数据库临时的默认存储引擎:SET default_storage_engine=< 存储引擎名 >
可以发现 MySQL 的默认存储引擎已经变成了 MyISAM。但是当再次重启客户端时,默认存储引擎仍然是 InnoDB。
如何选择MySQL存储引擎?
在使用 MySQL 数据库管理系统时,选择一个合适的存储引擎是一个非常复杂的问题。不同的存储引擎都有各自的特性、优势和使用的场合,正确的选择存储引擎可以提高应用的使用效率。
为了能够正确地选择存储引擎,必须掌握各种存储引擎的特性。
1) MyISAM
在 MySQL 5.1 版本及之前的版本,MyISAM 是默认的存储引擎。
MyISAM 存储引擎不支持事务和外键,所以访问速度比较快。如果应用主要以读取和写入为主,只有少量的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择 MyISAM 存储引擎是非常适合的。
MyISAM 是在 Web 数据仓储和其他应用环境下最常使用的存储引擎之一。
2) InnoDB
MySQL 5.5 版本之后默认的事务型引擎修改为 InnoDB。
InnoDB 存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比 MyISAM 存储引擎占用更多的磁盘空间。
如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么 InnoDB 存储引擎是比较合适的选择。
InnoDB 存储引擎除了可以有效地降低由于删除和更新导致的锁定,还可以确保事务的完整提交(Commit)和回滚(Rollback),对于类似计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB 都是合适的选择。
3) MEMORY
MEMORY 存储引擎将所有数据保存在 RAM 中,所以该存储引擎的数据访问速度快,但是安全上没有保障。
MEMORY 对表的大小有限制,太大的表无法缓存在内存中。由于使用 MEMORY 存储引擎没有安全保障,所以要确保数据库异常终止后表中的数据可以恢复。
如果应用中涉及数据比较少,且需要进行快速访问,则适合使用 MEMORY 存储引擎。
MySQL修改数据表的存储引擎
MySQL 中修改数据表的存储引擎的:ALTER TABLE <表名> ENGINE=<存储引擎名>;
在修改存储引擎之前,先使用 SHOW CREATE TABLE 语句查看 student 表当前的存储引擎。
以上这种方法适用于修改单个表的存储引擎,如果希望修改默认的存储引擎,在my.cnf配置文件的 [mysqld] 后面加入:
default-storage-engine=存储引擎名称
然后保存就可以了。
总结思考
1) 存储引擎很重要,数据库系统有个存储引擎,每张表也可以设置相应的存储引擎。
2) 如何选择存储引擎是门科学,根据业务场景选择适合自己的。
3) 上边只是简单入门,存储引擎的原理是什么呢?不同存储引擎的数据表在磁盘中是如何存储的?
本篇文章转载自c语言中文网,仅仅学习,如有侵权,请告知删除。
吐槽下:今天文章被锁定了,怀疑是有营销连接,比如上边转自哪个网站。哎,这个主要是声明下,以示尊重作者的劳动成果。简书设置的规则是好的,看执行效果了。
网友评论