MySql存储引擎

数据库存储引擎

在这里插入图片描述

  • 网络连接层
  • 数据库服务层

服务层是数据库的核心,查询解析,SQL执行计划优化,查询缓存。以及跨存储引擎的功能都在这一层实现:存储过程、触发器、试图等。内部结构如下:

在这里插入图片描述

  • 存储引擎层
    负责MySql中数据的存储于提取。服务器中的查询执行引擎通过API与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。MySql采用插件式的存储引擎。

  • 系统文件层

什么是锁
锁主要作用是管理共享资源的并发访问,用于实现事务的隔离性

锁的类型

共享锁(读锁),针对同一份数据,多个读写操作可以同时进行而不相互影响

独占锁(写锁),当前写操作没有完成之前,它会阻断其他写锁和读锁

MyISAM

MySql 5.5之前的版本默认存储引擎,MyISAM存储引擎表由MYD(数据文件)和MYI(索引文件)组成。frm是存储数据表结构的文件,其他引擎创建的文件也带有.frm文件。

锁的粒度

表级锁 & 行级锁

MyISAM特性

  1. 只支持表所,并发写入失效率很低
  2. 不支持事务
  3. 基于非聚簇索引进行存储的
  4. 可以压缩,压缩后的表不能修改,但节省磁盘空间,提高查询性能
  5. 全文索引
  6. 延迟更新索引键,新建索引时,会先将索引存储到内存中,刷新后才会将对应的索引写入

使用场景

非事务型应用&只读类应用

InnoDB

InnoDB使用表空间进行数据存储,支持事务,支持表级锁和行级锁

--查看表空间
show variables like "innodb_file_per_table";
set global innodb_file_per_table=off;

on:就是innodb是采用独立空间表,记录会存在"表名.ibd"里。系统表空间会产生IO瓶颈,因为刷新数据的时候是顺序进行的。

off:采用系统空间表,在数据库外部文件里生成一个"ibdataX"文件,X是数字,该模式下所有使用innodb引擎创建的表都存储在"ibdataX"文件中。独立表空间可以同时向多个表刷新数据。

MyISAM和InnoDB的对比

对比项InnoDBMyISAM
主外键支持不支持
事务支持不支持
行表锁行锁,适合高并发表锁
缓存缓存索引&真实数据,对内存要求高只缓存索引,不缓存真实数据
表空间
关注点性能事务

csv引擎

csv已".csv"文件存储表内容,".csm"文件存储表的元数据如表状态和数据量,数据已纯文本方式存储在文件中

注意

  1. 所有的列不能为NULL
  2. 不支持索引
  3. 可对数据直接编辑,编辑后要刷新数据表(flush tables;)才能在数据中显示

使用场景
适合作为数据交换的中间表

引用大佬文章:https://blog.csdn.net/wqq1027/article/details/96987929

Memory引擎

Memory,记忆体,也就是内存

Memory引擎,也称HEAP存储引擎,数据保存在内存中,mysql重启或电脑重启数据会丢失,但表结构会保存下来

特点

  • 支持HASH所有和BTree所有
  • 所有字段都为固定长度,如果设置了varchar(20),那么char也需要为20
  • 不支持BLOB和TEXT等大字段
  • 表级锁

总结

大部分情况下,都应该选择Innodb,除非需要用到某些Innodb不具备的特性,并且没有其他办法可以代替,否则都应该优先选择Innodb引擎。

  1. 如果需要应用事务,那么Innodb(或XtraDB)是目前最稳定且经过验证的选择
  2. Innodb可以在线热备份
  3. MyISAM崩溃后发生损坏的概率比Innodb高很多,而且数据恢复(repair table 表名) 速度也比较慢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值