05_存储引擎

本文介绍了MySQL中不同存储引擎的功能和特点,重点关注InnoDB和MyISAM。InnoDB是默认引擎,支持事务和外键,适合处理大量数据和事务操作;MyISAM则强调读取速度,适用于读多写少的场景。InnoDB提供行级锁定,MyISAM使用表级锁定。此外,还提及了其他如Archive、Memory、CSV等存储引擎的用途。
摘要由CSDN通过智能技术生成

在这里插入图片描述
存储引擎和表的关系:
不同的存储引擎底层决定表的结构不一样:所以存储引擎主要指表的类型。

在这里插入图片描述

1. 查看存储引擎

show engines;
# 或
show engines\G

在这里插入图片描述
在这里插入图片描述

2. 设置系统默认的存储引擎

  • 查看默认的存储引擎:
show variables like '%storage_engine%'; 
#或
SELECT  @@default_storage_engine;

在这里插入图片描述

  • 修改默认的存储引擎

如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用InnoDB作为表的存储引擎。

SET DEFAULT_STORAGE_ENGINE = MyISAM;

或者修改my.cnf文件:

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

在这里插入图片描述

3. 设置表的存储引擎

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

3.1 创建表时指定存储引擎

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

在这里插入图片描述

3.2 修改表的存储引擎

ALTER TABLE 表名 ENGINE = 存储引擎名称;

在这里插入图片描述

4. 引擎介绍

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

  • MySQL从3.23.34a开始就包含InnoDB存储引擎。大于等于5.5之后,默认采用InnoDB引擎
  • InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
  • 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
  • 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
  • 数据文件结构:
    • 表名.frm 存储表结构(MySQL8.0时,合并在表名.ibd中)
    • 表名.ibd 存储数据和索引
  • InnoDB是为处理巨大数据量的最大性能设计
    • 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如:.frm.par.trn.isl.db.opt等都在MySQL8.0中不存在了。
  • 对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
    InnoDB更适合处理数据量较大的,尤其还和事务相关的,如果说表中的数据量较少,操作以添加和查询为主,此时InnoDB性能是比不上MyISAM的
  • MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
    InnoDB内存要求高的原因是底层存储了表数据。因为InnoDB中底层索引和数据是存储在一起的,在ibd文件中。InnoDB中索引即数据,聚簇索引就是存储在底层表中一行行的数据,是合二为一的。MyISAM是不同的,数据和索引是分开存储的,加载时是只需要加载索引的,因此MyISAM效率就高

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

  • MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复
  • 5.5之前默认的存储引擎
  • 优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用
  • 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
  • 数据文件结构:
    • 表名.frm 存储表结构
    • 表名.MYD 存储数据 (MYData)
    • 表名.MYI 存储索引 (MYIndex)
  • 应用场景:只读应用或者以读为主的业务

4.3 Archive 引擎:用于数据存档

在这里插入图片描述
在这里插入图片描述

4.4 Blackhole 引擎:丢弃写操作,读操作会返回空内容

在这里插入图片描述

4.5 CSV 引擎:存储数据时,以逗号分隔各个数据项

相当于数据库中使用CSV引擎进行数据的存储,就可以使用CSV文件的方式传输
在这里插入图片描述
错误写法:

create table csv_demo(id int,name char(20))engine=csv;

正确写法:

create table csv_demo(id int not null,name char(20) not null)engine=csv;

在这里插入图片描述

show create table csv_demo;

在这里插入图片描述

insert into csv_demo(id,name) 
values(1,'xsy01'),(2,'xsy02');

在这里插入图片描述

mysql> select * from csv_demo;

在这里插入图片描述
查看底层数据文件:

cd /var/lib/mysql/

cd dbtest1

在这里插入图片描述
淦,无法下载远程文件
在这里插入图片描述

4.6 Memory 引擎:置于内存的表

注意:只是将数据存储在内存中,表结构仍然在物理磁盘上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.7 Federated 引擎:访问远程表

在这里插入图片描述

4.8 Merge引擎:管理多个MyISAM表构成的表集合

4.9 NDB引擎:MySQL集群专用存储引擎

在这里插入图片描述

4.10 引擎对比

在这里插入图片描述
在这里插入图片描述

5. MyISAM和InnoDB

在这里插入图片描述

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

补充:

1、InnoDB表的优势

在这里插入图片描述
在这里插入图片描述

2、InnoDB和ACID模型

在这里插入图片描述

在这里插入图片描述

3、InnoDB架构

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值