【MySQL从入门到精通】【高级篇】(六)MySQL表的存储引擎,InnoDB与MyISAM的对比

简介: 上一篇文章介绍了MySQL中SQL语句的执行流程 【MySQL从入门到精通】【高级篇】(五)MySQL的SQL语句执行流程,在介绍执行流程时提到了InnoDB和MyISAM两种存储引擎。这篇文章将来详细介绍下这两种存储引擎。

1. 简介

上一篇文章介绍了MySQL中SQL语句的执行流程 【MySQL从入门到精通】【高级篇】(五)MySQL的SQL语句执行流程,在介绍执行流程时提到了InnoDB和MyISAM两种存储引擎。这篇文章将来详细介绍下这两种存储引擎。

为了管理方便,人们把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存储数据的功能划分为存储引擎的功能。所以在MySQL Server完成了查询优化后,只需要按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端即可。

存储引擎就是指表的类型。其实存储引擎以前叫做表处理器,后来改成存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。

2. 环境

环境 版本
Red Hat 4.8.5-39
MySQL 5.7

1. 查看存储引擎

show engines

查询结果显示,MySQL 5.7支持9种存储引擎,分别为 MEMORY、MRG_MYISAM、CSV、FEDEATED、PERFORMANCE_SCHEMA、MYIASM、InnoDB、BLACKHOLE和ARCHIVE。


Engine参数表示存储引擎的名称。

Support参数表示MySQL数据库管理系统是否支持该存储引擎:YES表示支持,NO表示不支持。

Comment参数表示对存储引擎的描述

Transaction参数表示存储引擎是否支持事务:YES表示支持,NO表示不支持。

XA参数表示存储引擎所支持的分布式是否符合XA规范;YES表示支持,NO表示不支持,代表着该存储引擎是否支持分布式事务。

Savepoints参数表示存储引擎是否支持事务处理的保存点;YES表示支持,NO表示不支持,也就是说,存储引擎是否支持部分事务回滚。

2. 查询默认的存储引擎

show variables like '%storage_enginee%'

MySQL 5.5之前默认的存储引擎是MyISAM,在MySQL 5.5之后默认的存储引擎是InnoDB。

修改默认的存储引擎
如果在创建表的语句中没有显式指定表的存储引擎的话,那么默认就会使用InnoDB作为表的存储引擎,如果我们想要改变表的默认存储引擎的话,可以在启动服务器的时候执行如下命令:

SET DEFAULT_STORAGE_ENGINE=MyISAM;

或者修改my.cnf文件:

default-storage-engine=MyISAM
# 重启
systemctl restart mysqld.service

3. 设置表的存储引擎

存储引擎是负责对表中的数据进行提取和写入工作的,我们可以对不同的表设置不同的存储引擎。也就是说不同的数据表可以有不同的存储结构,不同的提取和写入方式。

3.1. 创建表时执行存储引擎

我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎InnoDB。如果我们想显式的指定一下存储引擎,那可以这么写:

CREATE TABLE 表名(
  建表语句;
)ENGINE=存储引擎名称;

比如我们想创建一个存储引擎为MyISAM的表可以这么写;

mysql> CREATE TABLE engine_demo_table(name varchar(20)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.01 sec)

4. 存储引擎介绍

4.1. InnoDB存储引擎:具备外键支持功能的事务存储引擎

InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。

除了增加和查询外,还需要更新,删除操作,那么,应优先选择InnoDB存储引擎。

除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

数据文件结构:

表名.frm 存储表结构(在My8.0时,合并在表名.ibd中)

表名.ibd存储数据和索引 (索引即数据)

InnoDB是为了处理大数据量的最大性能设计。

对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。

MyISAM只缓存索引,不缓存真实数据;InnoDB不仅仅缓存索引还缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。

4.2. MyISAM引擎:主要的非事务处理存储引擎

MyISAM提供了大量的特性,包含全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务,行级锁,外键,有一个毫无疑问的缺陷就是崩溃后无法完全恢复。

5.5之前默认的存储引擎。


优势就是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用。

针对数据统计有额外的常数存储。故而count(*)的查询效率很高。

数据文件结构:

表名.frm 存储表结构

表名.MYD 存储数据(MYData)

表名.MYI 存储索引(MYIndex)

应用场景:只读应用或者以读为主的业务。

MyISAM和InnoDB的对比项。

对比项 MyISAM InnoDB
外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
自带系统表使用 Y N
关注点 性能:节省资源,消耗少,简单业务 事务:并发写,事务,更大资源
默认安装 Y Y
默认使用 N Y

总结

本文主要介绍MySQL中两种常见的存储引擎,分别是InnoDB和MyISAM,InnoDB作为MySQL5.5之后默认的存储引擎,它的优点是支持事务和行级锁,索引即数据。而MyISAM的优点是访问速度快,索引和真实数据是分开的。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 网络协议 关系型数据库
MySQL8.4创建keyring给InnoDB表进行静态数据加密
MySQL8.4创建keyring给InnoDB表进行静态数据加密
535 1
|
10月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
401 15
|
存储 SQL 关系型数据库
MySQL存储引擎简介
在选择相应的存储引擎时,需要充分考虑实际业务场景、性能需求和数据一致性要求,从而为数据管理提供最佳支持。
557 17
|
SQL 缓存 关系型数据库
使用温InnoDB缓冲池启动MySQL测试
使用温InnoDB缓冲池启动MySQL测试
273 0
|
安全 关系型数据库 MySQL
MySQL8使用物理文件恢复MyISAM表测试
MySQL8使用物理文件恢复MyISAM表测试
310 0
|
存储 关系型数据库 MySQL
MYSQL支持的存储引擎有哪些, 有什么区别
MYSQL存储引擎有很多, 常用的就二种 : MyISAM和InnerDB , 者两种存储引擎的区别 ; ● MyISAM支持256TB的数据存储 , InnerDB只支持64TB的数据存储 ● MyISAM 不支持事务 , InnerDB支持事务 ● MyISAM 不支持外键 , InnerDB支持外键
|
10月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
590 158
|
10月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
10月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1578 152
|
10月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1095 156

推荐镜像

更多