Linux系统架构-----MySQL存储引擎MyISAM与InnoDB

一.MySQL的存储引擎简介

什么是存储引擎

  • MySQL中的数据用各种不同的技术存储在文件,每一种技术都使用不同的存储机制、索引技巧、锁定水平等不同的功能和能力,通过选择不同的技术,能够获得额外的速度或者功能,从而改善应用的整体功能。这些不同的技术以及配套的功能在MySQL中称为存储引擎。

MySQL存储引擎的体系结构

  • MySQL提供了多个不同的存储引擎,可以预先设置或者在MySQL服务器中启用
  • MySQL的体系结构由SQL接口、解析器、优化器、缓存、存储引擎组成,具体包括:
  • Connectors:连接组件;Enterprise Management Service & Utilities:管理服务控制组件;Connection Pool:连接池组件;SQL Interface:SQL接口组件;Parser:查询分析器组件;Optimizer:优化器组件;Caches & Buffers:缓存组件;Pluggable Strorage Engine:插件式存储引擎;File System:文件系统;File & Logs:存储文件和日志。

  • MySQL提供了一系列的标准的管理和服务支持,这些标准和引擎无关,而是每个数据库所必须的,如:SQL Interface 、Paster 、Optimizer 等。而存储引擎是底层物理结构的实现,开发者可以按照自己的意愿来开发或者修改存储引擎的内容
  • MySQL支持插件式的表存储引擎,这种独有的插件式体系结构,让存储引擎有了依赖与应用的多样性
  • MySQL系统中,存储引擎处于文件系统上,在数据保存到数据文件之前或传输到存储引擎,然后按照各个引擎的的存储格式进行数据存储。其优点在于,仅需要提供特殊应用所需的特性;数据库的系统的开销比较小,具有更有效和更高效的数据库性能

二.MyISAM存储引擎

MyISAM的介绍以及优缺点

  • MyISAM存储引擎是MySQL关系数据库系统5.5版本之前默认的存储引擎,前身是ISAM
  • ISAM是一个定义明确且历经时间考验的数据表格管理方法,在设计之时就考虑到数据库被查询的次数要远大于更新的次数
  • ISAM的优点:执行读取操作速度很快;不占用大量的内存和存储资源
  • ISAM的缺点:不支持事务处理;不能够容错,如果硬盘崩溃了,数据文件无法恢复
  • MyISAM的管理非事务表,是ISAM的扩展格式,提供ISAM里没有的索引和字段管理等大量功能,MyISAM使用一种表格锁定的机制,以优化多个并发的读写操作。MyISAM提供高速存储和检索,以及全文搜索能力,受到web开发的青睐

MyISAM的特点

  • 不支持事务,需要事务支持的系统不能使用MyISAM作为存储引擎
  • 表级锁定形式,数据更新时锁定整个表
  • 数据库在读写过程中相互阻塞(在数据写入的过程中阻塞用户数据的读取;在数据读取的过程中阻塞用户数据的写入)
  • 可以通过key_buffer_size来设置缓存索引,提高访问的性能,减少磁盘IO的压力
  • 采用MyISAM存储引擎进行数据单独写入或者读取,速度较快且占用资源相对要少
  • MyISAM存储引擎它不支持外键约束,只支持全文索引
  • 每个MyISAM在磁盘上存储三个文件,每一个文件的名字以表的名字开始,扩展名指出文件类型(.frm文件存储表定义;数据文件的扩展名为.MYD(MYData);索引文件的扩展名是.MYI(MYIndex)

MyISAM适用的生产场景

  • 公司业务不需要事务的支持
  • 一般单方面读取数据比较多的业务,或单方面写入数据的比较多的业务
  • MyISAM存储引擎数据读写都比较频繁场景不合适
  • 使用读写并发访问相对较低的业务
  • 对数据业务一致性要求不是非常高的业务
  • 服务器硬件资源相对比较差

三.InnoDB存储引擎

InnoDB的介绍

  • InnoDB存储引擎不同于MyISAM存储引擎,能够支持事务安全表(ACID兼容),具有提交、回滚和崩溃恢复的能力
  • InnoDB是为了处理巨大的数据量时的最大性能而设计的,它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
  • InnoDB存储引擎被完全与MySQL服务器整合,为在内存中缓存数据和索引维持它自己的缓冲池
  • InnoDB在一个表空间中存储它的表与索引,表空间可以包含数个文件。这与MyISAM表不同,比如在MyISAM表中每个表被存储在分离的文件中。InnoDB表可以是任何尺寸,即使文件尺寸被限制为2GB的操作系统上也无影响

InnoDB的特点

  • 支持事务,支持四个事务隔离级别
  • 行级锁定,但是全表扫描仍然会是表级锁定
  • 读写阻塞与事务隔离级别相关
  • 具有非常高效的缓存特性,能缓存索引,也能缓存数据
  • 表与主键以簇的方式存储
  • 支持分区、表空间,类似Oracle数据库 
  • 支持外键约束,MySQL5.5版本以前不支持全文索引,5.5版本以后支持全文索引
  • 对硬件资源要求比较高

innoDB适用的生产场景

  • 业务需要事务的支持
  • 行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引来完成的
  • 业务数据更新较为频繁的场景,比如:论坛、微博
  • 业务数据一致性要求比较高、,比如银行业务
  • 硬件设备内存较大,利用Innodb较好的缓存能力来提高内存利用率,减少磁盘IO的压力

企业选择引擎的依据

  • 存储引擎支持的字段和数据类型(所有引擎都支持通用数据类型,但不是所有的引擎都支持其他的字段类型,比如二进制对象)
  • 锁定类型:表锁定--MyISAM支持;行锁定--InnoDB支持
  • 索引的支持
  • 事务处理的支持

四.查看与改存储引擎

  • 查看数据库配置

  • 查看使用的存储引擎
方法1:show table status from 库名 where name='表名';
方法2:show create table 表名;

  • 修改存储引擎
方法1:alter table table_name engine=引擎类型;
方法2:修改my.cnf,指定默认存储引擎并重启服务
vim /etc/my.cnf
...
default-storage-engine=InnoDB
..
service mysqld restart
方法3:创建表的同时,指定存储引擎
create table 表名 (字段) engine = 引擎类型
方法4:Mysql_convert_table_format 转化存储引擎
Mysql_convert_table_format -user=root -password=密码
-sock=/tmp/mysql.sock -engine =引擎类型 库名 表名
  • 方法1

  • 方法2

  • 方法3

  • 方法4

命令参数

参数 描述
--force 如果碰到错误强制进行转换
--host 转换的主机名
--password 当前进行转换用户的密码
--port 若不是本地连接,指定端口
--socket SOCKET文件存放位置
--user 连接用户名
发布了94 篇原创文章 · 获赞 108 · 访问量 6264

猜你喜欢

转载自blog.csdn.net/qq_42761527/article/details/103884909