一.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存储引擎是MySQL关系数据库系统5.5版本之前默认的存储引擎,前身是ISAM
- ISAM是一个定义明确且历经时间考验的数据表格管理方法,在设计之时就考虑到数据库被查询的次数要远大于更新的次数
- ISAM的优点:执行读取操作速度很快;不占用大量的内存和存储资源
- ISAM的缺点:不支持事务处理;不能够容错,如果硬盘崩溃了,数据文件无法恢复
- MyISAM的管理非事务表,是ISAM的扩展格式,提供ISAM里没有的索引和字段管理等大量功能,MyISAM使用一种表格锁定的机制,以优化多个并发的读写操作。MyISAM提供高速存储和检索,以及全文搜索能力,受到web开发的青睐
- 不支持事务,需要事务支持的系统不能使用MyISAM作为存储引擎
- 表级锁定形式,数据更新时锁定整个表
- 数据库在读写过程中相互阻塞(在数据写入的过程中阻塞用户数据的读取;在数据读取的过程中阻塞用户数据的写入)
- 可以通过key_buffer_size来设置缓存索引,提高访问的性能,减少磁盘IO的压力
- 采用MyISAM存储引擎进行数据单独写入或者读取,速度较快且占用资源相对要少
- MyISAM存储引擎它不支持外键约束,只支持全文索引
- 每个MyISAM在磁盘上存储三个文件,每一个文件的名字以表的名字开始,扩展名指出文件类型(.frm文件存储表定义;数据文件的扩展名为.MYD(MYData);索引文件的扩展名是.MYI(MYIndex)
- 公司业务不需要事务的支持
- 一般单方面读取数据比较多的业务,或单方面写入数据的比较多的业务
- MyISAM存储引擎数据读写都比较频繁场景不合适
- 使用读写并发访问相对较低的业务
- 对数据业务一致性要求不是非常高的业务
- 服务器硬件资源相对比较差
- InnoDB存储引擎不同于MyISAM存储引擎,能够支持事务安全表(ACID兼容),具有提交、回滚和崩溃恢复的能力
- InnoDB是为了处理巨大的数据量时的最大性能而设计的,它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
- InnoDB存储引擎被完全与MySQL服务器整合,为在内存中缓存数据和索引维持它自己的缓冲池
- InnoDB在一个表空间中存储它的表与索引,表空间可以包含数个文件。这与MyISAM表不同,比如在MyISAM表中每个表被存储在分离的文件中。InnoDB表可以是任何尺寸,即使文件尺寸被限制为2GB的操作系统上也无影响
- 支持事务,支持四个事务隔离级别
- 行级锁定,但是全表扫描仍然会是表级锁定
- 读写阻塞与事务隔离级别相关
- 具有非常高效的缓存特性,能缓存索引,也能缓存数据
- 表与主键以簇的方式存储
- 支持分区、表空间,类似Oracle数据库
- 支持外键约束,MySQL5.5版本以前不支持全文索引,5.5版本以后支持全文索引
- 对硬件资源要求比较高
- 业务需要事务的支持
- 行级锁定对高并发有很好的适应能力,但需要确保查询是通过索引来完成的
- 业务数据更新较为频繁的场景,比如:论坛、微博
- 业务数据一致性要求比较高、,比如银行业务
- 硬件设备内存较大,利用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 | 连接用户名 |
推荐阅读
- 数据库|SQL行转列方式优化查询性能实践
- mysql|一文深入理解mysql
- 达梦数据库|DM8表空间备份恢复
- 数据技术|一文了解Gauss数据库(开发历程、OLTP&OLAP特点、行式&列式存储,及与Oracle和AWS对比)
- SqlServer|sql server的UPDLOCK、HOLDLOCK试验
- 谈灾难恢复指标(RTO与RPO是什么鬼())
- RPO与RTO
- 数据库|效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...