前言
在上一篇文章中,耀哥提到InnoDB执行更新的SQL语句时,会修改redo日志。这是为什么呢?在本节中耀哥将给出答案。
一. 存储引擎的概念
大家都知道MySQL的数据都是存在表中的,每个表格代表一组数据,表在存储数据的同时,还要关注存储数据的数据结构,而这些数据结构就是由存储引擎决定的。现实的开发当中,由于业务的场景不同,有些表的数据经常被查询,所以要求查询的性能要强一些,有些数据要求增删改速度快,有的则对数据安全(事务,外键)有特殊的规定。这样一来我们针对不同的要求选择不同的数据结构来组织数据。换句话说,业务决定了使用什么存储引擎。以下耀哥引用百度百科对存储引擎的解释,来加深大家对存储引擎的认识。
MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。
二. 常用的存储引擎
MySQL预先给我们提供了很多存储引擎(数据结构),来应付各种不同的业务场景的数据的存储,我们可以输入“show engines;” 查看当前版本的MySQL支持的引擎。
从上图咱们可以看出,目前比较常用的存储引擎有 【InnoDB,MyISAM,MEMORY】三种。MySQL5.5之后InnoDB就成为了默认的存储引擎,那么在真实的开发中我们应该怎么选择呢?
三. 怎样选择存储引擎
在实际开发中,根据不同的业务场景来选择存储引擎是一个比较复杂的问题,很难说谁比谁更好一些。耀哥先用一张表格把常见的存储引擎的优缺点对比出来,供大家在不同的业务场景下来选择。
InnoDB:以下两种场景应该优先考虑使用
InnoDB:
对事务完整性要求比较高的,比如金融方面的业务,因为只有InnoDB的存储引擎是支持事务的。到此大家应该也能理解上一篇中提到的【为什么InnoDB中的存储引擎做增删改的操作的时候要记录redo日志了】,因为InnoDB引擎对数据的安全性要求比较高,当某些原因导致内存数据丢失,InnoDB会在重启时,通过重放REDO恢复数据。
并发业务即要求安全并且对性能要求比较高的业务,比如秒杀或者抢票,因为InnoDB的锁机制是行锁,在上锁的时候能够兼顾安全和并发的性能。
MyISAM: 以下两种场景应该优先考虑使用
MyISAM:
需要插入数据快的业务场景;
仅仅用在读记录,对并发和完整性要求低的场景。
MEMORY: 对于要求查询速度快,对数据安全要求不高的场景可以选择MEMORY。顾名思义,这种数据保存在内存中,进程一结束数据就丢掉了。
四. 关于存储引擎的常见操作
说了这么多理论的东西,接下来耀哥给大家介绍一下关于存储引擎的常见操作。
修改默认的存储引擎,默认的存储引擎是InnoDB,那么我们怎么修改默认的存储引擎呢?找到mysql.ini配置文件在【mysqld】节点最后添加 default-storage-engine=存储引擎名字。重启MySQL服务器。
创建表的时候指定存储引擎的类型,不指定的话就是默认的存储引擎。
CREATE TABLE `city` (
`cid` bigint(20) NOT NULL AUTO_INCREMENT,
`cname` varchar(255) DEFAULT NULL,
`pid` bigint(20) DEFAULT NULL,
PRIMARY KEY (`cid`),
KEY `idx_city_pid` (`pid`)
) ENGINE=InnoDB # 在此处指定存储引擎的类型
使用【show create table 表名】查询表的存储引擎的类型
修改指定表的存储引擎
alter table city ENGINE=MyISAM
结语
在本章中耀哥给大家讲述了什么是存储引擎,以及各种常见的存储引擎的使用场景,一句话总结,存储引擎就是数据的存储结构,由实际业务决定。大家都理解了吗,欢迎大家继续关注此套课程,后面的内容更精彩哦。
相关文章
06.15抢座
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱