【MySQL】数据库——存储引擎

一、存储引擎概述

1.概念

  • MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎
  • 存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式
  • 存储引擎是MySQL数据库中的组件负责执行实际的数据I/O操作
  • MySQL系统中,存储引擎工作在文件系统之上,数据库的数据会先传到存储引擎,按照各个存储引擎的存储格式,保存到文件系统

MySQL 查询数据的执行过程:

1、客户端向 MySQL 服务器发送一条查询请求,连接器负责处理连接,并进行身份验证和权限控制。

2、MySQL 先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果;否则使用查询解析器进行SQL语句解析、预处理,再由优化器生成对应的执行计划。

3、MySQL根据执行计划,调用存储引擎来执行查询。

4、将结果返回给客户端,同时缓存查询结果。 

2.常用的存储引擎

  • MyISAM:Mysql 5.5之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
  • InnoDB:事务型速记的首选引擎,支持ACID事务,支持行级锁定,MySQL5.5成为默认数据库引擎

二、MyISAM和InnoDB

类型MyISAMInnoDB
事务不支持事务支持事务
外键约束不支持外键约束支持外键约束
锁定方式只支持表级锁定支持行级锁定,全表扫描时会表级锁定
读写性能只支持单独的查询与插入,读写阻塞读写和事务并发能力较好
全文索引支持全文索引支持全文索引(5.5版本以后支持)
硬件硬件资源占用较小缓存能力较好,可以减少磁盘IO的压力
存储文件数据文件和索引文件分开存储,存储为三个文件(.frm的表结构文件,.MYD的数据文件,.MYI的索引文件)数据文件也是索引文件,存储成两个文件(.frm的表结构文件,.ibd的数据和索引文件)
使用场景使用场景:使用不需要事务支持,单独的查询和插入的业务场景使用场景:使用于需要事务支持,一致性要求比较高,数据会频繁更新,读写并发高的业务场景;

三、MySQL储存引擎的管理

1.查看表使用的存储引擎

use 库名;
show create table 表名;
 
show table status [from 库名] where name='表名'\G;

2.查看系统支持的存储引擎

show engines;

3.修改表默认存储引擎

vim /etc/my.cnf
[mysqld]
default-storage-engine=innodb/myisam
 
systemctl restart mysqld
 
mysql -uroot -p密码
 
create table 表名(字段 数据类型,...);  #创建一个表
show create table 表名;                #查看表结构,储存引擎

 4.当表已经存在,想要修改其存储引擎

alter table 表名 engine=innodb/myisam;

5.创建表的时候,直接指定存储引擎

create table 表名 (字段 数据类型,...) engine=innodb/myisam; 
#创建表时指定engine为innoDB

四、死锁:

定义:死锁是指两个或多个事务在同一个资源上相互占用,并请求对方锁定的资源,从而导致相互阻塞的现象。

如何避免死锁?
1)设置事务的锁等待超时时间 innodb_lock_wait_timeout
2)设置开启死锁检测功能 innodb_deadlock_detect

show VARIABLES like  'innodb_deadlock_detect';       #查看当前死锁检测是否开启
 
set global innodb_deadlock_detect = ON;              #ON为开启死锁检测,OFF为关闭


3)为表建立合理的索引,减少表锁发生的概率
4)如果业务允许,可以降低隔离级别,比如选用 提交读 Read Committed 隔离级别,从而避免间隙锁导致死锁
5)建议开发人员尽量使用更合理的业务逻辑,比如多表操作时以固定顺序访问表,尽量避免同时锁定多个资源
6)建议开发人员尽量保持事务简短,减少对资源的占用时间和占用范围
7)建议开发人员在读多血少的场景下采用乐观锁机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/756718.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字化转型中,通过客户画像寻找触达客户经济路径

在当今数字化高速发展的时代,企业的数字化转型势在必行。其中,如何通过客户画像找到触达客户经济路径成为关键所在。 客户画像,是对客户全方位信息的精细描绘,涵盖了年龄、性别、地域、消费习惯、兴趣爱好等众多维度。这就如同为…

大模型和数据库最新结合进展

写在前面 本文主要内容是上次接受 infoQ 访谈,百度智能云朱洁老师介绍了大模型和 AI 结合相关话题,这次整体再刷新下,给到对这个领域感兴趣的同学。 当前,百度智能云云数据库特惠专场开始!热销规格新用户免费使用&am…

前端技术栈学习:Vue2、Vue cli脚手架、ElementUI组件库、Axios

1 基本介绍 (1)Vue 是一个前端框架, 易于构建用户界面 (2)Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或项目整合 (3)支持和其它类库结合使用 (4&#…

mysql数据库的主从复制

MySQL主从复制的应用场景 当只有一台MySQL服务器要负责读写时,对于安全性,高可用,高并发等需求就不能满足,因此就要建立集群,集群的基础就是主从复制。 原理(过程) MySQL支持的复制类型 基于语…

守护你的每一步:揭秘电子厂劳保鞋的秘密

在电子厂的繁忙车间里,工友们忙碌的身影中,你是否注意到那一双双看似普通的劳保鞋?它们不仅承载着工人们辛勤的汗水,更是守护他们每一步安全的重要装备。今天,就让我们一起揭秘电子厂劳保鞋的秘密,看看它们…

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中,通常我们会使用消息代理来构建一个Topic,让所有 服务节点监听这个主题,当生产者向topic中发送变更时,这个主题产生的消息会被…

【论文阅读】transformer及其变体

写在前面: transformer模型已经是老生常谈的一个东西,以transformer为基础出现了很多变体和文章,Informer、autoformer、itransformer等等都是顶刊顶会。一提到transformer自然就是注意力机制,变体更是数不胜数,一提到…

解决error Error: certificate has expired问题

安装环境遇到下面问题: 产生原因:可能是开了服务器代理访问导致ssl安全证书失效 解决办法: 在终端输入以下命令: yarn config set "strict-ssl" false -g

Element UI搭建使用过程

本章内容基于上一篇---Vue-cli搭建项目基础版 Vue-cli搭建项目----基础版-CSDN博客 官网地址:Element - The worlds most popular Vue UI framework 介绍:完全基于Vue.js ,用于快速搭建用户界面. 第一步:安装ElementUI 在终端输入 npm i element-ui -S 在main.js输入 …

《SpringBoot+Vue》Chapter04 SpringBoot整合Web开发

返回JSON数据 默认实现 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>在springboot web依赖中加入了jackson-databind作为JSON处理器 创建一个实体类对象…

Python逻辑控制语句 之 判断语句--if、if else 和逻辑运算符结合

逻辑运算符&#xff1a; and or not 1.案例一 需求&#xff1a; 1. 获取⽤户输⼊的⽤户名和密码 2. 判断⽤户名是 admin 并且密码是 123456 时, 在控制台输出: 登录成功! 3. 否则在控制台输出: 登录信息错误! # 需求&#xff1a; # 1. 获取用户输入的用户名和密码 # 2. 判断…

Vue3使用jsbarcode生成条形码,以及循环生成条形码

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家分享Vue3使用jsbarcode生成条形码&#xff0c;以及循环生成条形码&#xff0c;介绍了JsBarcode插件的详细使用方法&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻…

005-GeoGebra基础篇-GeoGebra的点

新手刚开始操作GeoGebra的时候一般都会恨之入骨&#xff0c;因为有些操作不进行学习确实有些难以凭自己发现。 目录 一、点的基本操作1. 通过工具界面添加点2. 关于点的选择&#xff08;对象选择通用方法&#xff09;&#xff08;1&#xff09;选择工具法&#xff08;2&#xf…

synchronized 锁优化原理

目录 一、轻量级锁 二、锁膨胀 三、自旋优化 四、偏向锁 五、锁消除 一、轻量级锁 1. 会创建一个锁记录 Lock Record&#xff08;保存在线程栈中&#xff09;&#xff0c;尝试 CAS 修改 Mark Word 中的对象头&#xff0c;是一种乐观锁的思想&#xff0c;而不是将 Java 对…

如何选择适合的接口自动化测试工具!

引言&#xff1a; 在现代软件开发中&#xff0c;接口自动化测试已经成为保证软件质量的重要环节。通过自动化测试工具&#xff0c;可以有效地提高测试效率、减少人力成本&#xff0c;并且能够更好地发现和解决潜在的问题。然而&#xff0c;面对众多的接口自动化测试工具&#…

React+TS前台项目实战(十九)-- 全局常用组件封装:带加载状态和清除等功能的Input组件实现

文章目录 前言Input组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天我们来封装一个input输入框组件&#xff0c;并提供一些常用的功能&#xff0c;你可以选择不同的 尺寸、添加前缀、显示加载状态、触发回调函数、自定义样式 等等。这些功能在这个项目中…

数据结构-分析期末选择题考点(排序)

何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样&#xff0c;我将整理一下排序的题型以及解题方法给你们 由于时间还很多&#xff0c;我就慢慢总结吧&#xff0c;一天一章的样子&#xff0c;明天总结串、后天…

开发技术-Java集合(List)删除元素的几种方式

文章目录 1. 错误的删除2. 正确的方法2.1 倒叙删除2.2 迭代器删除2.3 removeAll() 删除2.4 removeIf() 最简单的删除 3. 总结 1. 错误的删除 在写代码时&#xff0c;想将其中的一个元素删除&#xff0c;就遍历了 list &#xff0c;使用了 remove()&#xff0c;发现效果并不是想…

fiddler 返回Raw乱码

有时会发现自己发送的请求后&#xff0c;返回结果Raw里面是乱码&#xff0c;可以勾选Decode并重新发送请求就解决了 这个时候将Decode勾选一下 此时就好了

车辆数据的提取、定位和融合(其二.一 共十二篇)

第一篇&#xff1a; System Introduction 第二篇&#xff1a;State of the Art 第三篇&#xff1a;localization 第四篇&#xff1a;Submapping and temporal weighting 第五篇&#xff1a;Mapping of Point-shaped landmark data 第六篇&#xff1a;Clustering of landma…