当前位置: 首页 > news >正文

【Mysql】之存储引擎详解

一、定义

        存储引擎是mysql数据库的一个核心组件。负责执行实际的数据IO操作(数据的存储和提取)。

        存储引擎工作在文件系统之上,数据库存储数据会先将数据传输到存储引擎,再按照存储引擎的存储格式保存到文件系统中。

二、常用的存储引擎

MyISAMInnoDB
事务和外键约束不支持支持
占用资源较小
访问速度较快
锁定方式表级锁定行级锁定
全文索引支持支持
读写阻塞
存储表数据文件 .MYD
索引文件 .MYI
表结构文件 .frm(8.0以前的版本)  
.sdi(8.0开始的版本)
表空间文件 .ibd      
表结构文件 .frm(8.0开始废弃)
适用场景不需要事务处理,单独写入或查询的应用场景需要事务支持,一致性要求高,数据更新频繁的应用场景

        InnoDB的行级锁定是通过索引加锁来实现的,如果对没有添加索引的字段操作时会发生全表扫描,仍然会是表级锁定。

三、存储引擎操作管理

3.1  针对已存在的表修改存储引擎

alter table 表名 engine=innodb/myisam;

3.2  新建表时指定存储引擎

create table 表名 (....) engine=innodb/myisam; 

3.3  修改配置文件设置默认存储引擎

vim /etc/my.cnf

default-storage-engine=innodb/myisam

3.4  修改环境变量设置默认存储引擎

set session/global default_storage_engine=innodb/myisam; 

3.5  查看所使用的存储引擎

show session/global variables like 'default_storage_engine';
#查看表使用的存储引擎
show create table 表名;       
show table status where name='表名';
show engines;

四、死锁

4.1  定义

        死锁是指两个或多个事务在同一个表上相互占用对方可能请求的行记录,并请求对方已锁定的行记录,从而导致相互阻塞的现象。

4.2  如何解决和避免死锁?

1、设置事务的锁等待超时的参数   innodb_lock_wait_timeout

2、设置开启主动检测死锁的参数   innodb_deadlock_detect

3、为表创建合理的索引,减少全表扫描和表锁发生的概率

4、如果业务允许,可以适当降低隔离级别,比如从可重复读(repeatable read)改为提交读(read committed),来减少锁的范围

5、尽量减少事务的长度,保持事务简短,减少对资源的占用时间和范围

6、建议开发人员尽量使用更合理的业务逻辑,比如多表操作时以固定顺序访问表,尽量避免同时锁定多个资源

http://www.dtcms.com/a/109668.html

相关文章:

  • 【UVM学习笔记】更加灵活的UVM—通信
  • oracle asm 相关命令和查询视图
  • 本地部署爆款传输神器 FastSend 并实现外部访问
  • 智能巡检机器人在化工企业的应用研究
  • 针对 Python 3.7.0,以下是 Selenium 版本的兼容性建议和安装步骤
  • MTK-GMS版本国内WIFI受限问题
  • Fatal error compiling: 无效的目标发行版: 17 -> [Help 1]的解决方法
  • c++ (通用引用)和(左值引用)区别
  • 自适应信号处理任务(过滤,预测,重建,分类)
  • MAUI开发第一个app的需求解析:登录+版本更新,用于喂给AI
  • qRegisterMetaType函数使用
  • 泛微ECOLOGY9 解决文档中打开发票类PDF文件无内容的配置方法
  • Python Cookbook-5.2 不区分大小写对字符串列表排序
  • flux文生图部署笔记
  • unet结构, 为什么要下采样, 上采样?
  • Docker安装开源项目x-ui详细图文教程
  • 【一步步开发AI运动APP】六、运动计时计数能调用
  • 天津大学合成生物技术全国重点实验室-随笔09
  • USB(通用串行总线)数据传输机制和包结构简介
  • 【蓝桥杯】算法笔记2
  • 怎么让一台云IPPBX实现多家酒店相同分机号码一起使用
  • LJF-Framework 第13章 LjfAsyncManager异步任务管理
  • keep-alive缓存
  • [dp5_多状态dp] 按摩师 | 打家劫舍 II | 删除并获得点数 | 粉刷房子
  • HTTP数据传输的几个关键字Header
  • 《操作系统真象还原》第五章(1)——获取内存容量
  • Leetcode 1262 -- 动态规划
  • #window系统php-v提示错误#
  • 一周学会Pandas2 Python数据处理与分析-Pandas2简介
  • Node.js 与 MySQL:深入理解与高效实践