MySQL---搜索引擎

MySQL的存储引擎是什么

MySQL当中数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧 锁定水平,以及最终提供的不同的功能和能力,这些就是我们说的存储引擎。

MySQL存储引擎的功能

1.MySQL将数据存储在文件系统中的一种格式和方式

2.存储引擎负责执行实际的数据I/O操作。

3.存储数据引擎介于数据和文件系统之间,数据会先保存到存储引擎,再按照存储引擎的格式保存到文件系统中

即:如何把数据保存到文件系统中

MySQL的存储引擎的分类

1.INNODB:5.5之后 MySQL的默认存储引擎。事务性速记引擎。支持ACID事务。支持行锁,锁表。写入和查询性能比较好。

2.MYISAM:5.5之前的默认存储引擎。插入数据性能较高,查询速度也很优秀。但不支持事务

3.memory引擎:所有数据都保存在内存的存储引擎,但是服务一旦重启,全部丢失。插入数据,更新,查询数据,速度比较快。但是占用内存空间比较大。会占用和数据量正比的内存空间

4.csv:由逗号分隔数据的存储引擎。他会在数据库子目录里为每一个数据表创建一个 .csv的文件。就是一个普通的文本文件。每个数据行占用一个文本行。但是 csv不支持索引。

5.Archive:非常适合存储大量的独立的,历史数据的引擎。不需要被经常读取。插入的速度很快。查询的效率比较低。

6.blackhole:黑洞引擎,写入的任何数据都会消失。

查看存储引擎

show engines\G;
纵向查看

1.命令行修改引擎

 alter table hj engine=myisam;
 命令行修改

2.配置文件修改

vim /etc/my.cnf
配置文件修改

MYISAM和INNODB做个分析对比:

MYISAM:不支持事务,也不支持外键,只支持全文索引,数据文件和索引文件是分开的。

访问速度快

使用场景:查询和插入数据为主的应用。

在磁盘上有三个文件:

文件名和表名相同。但是扩展名不同:

.frm:存储表的结构

.MYD:数据文件

.MYI:索引文件的扩展名

MYISAM特点

1.更新数据时,整个表都会锁定。

2.数据库在读写过程中相互阻塞。

MYISAM支持的存储格式:

1.静态表,固定长度表,静态表myisam的默认存储格式。静态表中字段都是非可变字段。每个记录都是固定长度的。存储快,方便缓存,有了故障容易恢复。缺点是占用空间比较多。

2.动态表,可以包含可变字段,记录的长度是不固定的。优点是占用空间比较少。频繁更新数据,删除记录,会产生碎片。需要定期清理。myisamchk -r。出现故障恢复比较困难。

3.压缩表,myisamchk工具创建,占据空间非常小。每条记录都是单独压缩。

INNODB支持的存储格式:

1.支持事务,支持4个事务的隔离级别。5.5之后是mysql的默认存储引擎。

读写阻塞和隔离级别相关

支持高效的缓存索引以及缓存数据。

表于主键以簇方式存储BTREE。

支持外键约束,5.5之后INNODB也可以支持全文索引。

硬件资源的要求比较高。

支持行锁定,也可以支持表锁定(全表扫描)

1.使用like模糊查询,会进行全表扫描,锁定整个表

2.对没有创建索引的字段进行增,删,改,也会进行全表扫描,锁定整个表。

3.使用索引,进行增 删 改 ,则是行级锁定。

INNODB的特点

1.不保存表的行数,统计表的行数会扫描一遍整个表来计算有多少行。

2.自增长字段必须有索引,INNODB中必须包含只有该字段的索引

3.delete清空表,一行一行删,速度比较慢,推荐 truncate

适用场景:

1.业务需要事务的支持

2.论坛,微博,对数据一致性比较高的场景

3.访问量和并发比较高的场景,innodb支持缓存,减少后台服务器的压力。

三个文件:

表名 .frm (表结构文件)

表名 .idb(既是数据文件,又是索引名)

dp.opt:表的属性文件

INNODB行锁和索引的关系 以及表锁 排他锁 死锁

行锁演示

要对一个非索引键进行操作,当一个事务对非索引列进行操作,因为要全表扫描过滤,所有整张表都会锁定,另一个事务只能查。

create table test (
id int(4) PRIMARY KEY,
name varchar(10),
age varchar(3)
);
alter table test add index name_index (name);
show index from test;

此时  右侧的命令无法执行,只到命令行执行commit才可运行(时间15.9秒可以看出来commit执行之后才将行锁取消)

此时使用name,普通索引,会锁住索引行,紧接着对应的主键,一并锁定,就是把那一行锁住

commit即可

表锁演示

删除age=2(没有设置索引),事务B(右侧)所有为age的条件都无法更新数据,该表现为表锁

死锁演示

行锁如果使用不当会导致死锁(死锁一般是事务相互等待对方释放资源,最后形成环路造成的)

在终端执行
begin;
delete from test1 where id =4;
在外部
begin;
select * from test1 where id =5 for update;
再回到终端执行
delete from test1 where id =5;
事务A事务B

begin;

begin;

delete from test where name = 'a';  //事务结束前,name='a'的行锁定

select * from test where name = 'b' for update;//加排他锁,模拟并发,锁定name='a';
delete from test where name='b'; //死锁产生
update test set name='abc' where name='a'; #死锁产生。因为会话1中name='a'的行还在删除过程中,该行已被锁定
rollback;//回滚,事务结束

1、 发生死锁的时候,数据库会自动选择一个事务作为受害者,然后先解除思索,再回滚事务。
2、 MySQL的默认的死锁机制,会选则一个事务作为思索的牺牲品。会直接终止其中一个事务,但是不会自动回滚。

如何仅可能避免死锁

1.业务逻辑要合理,以固定的顺序访问表和行

2.如果事务的类型比较复杂,要进行拆分,在业务允许的情况下,把大事务拆小

3.在同一事务中,尽可能一次性锁定所有需要的资源。可以减少需要的资源,可以减少死锁的概率

4.隔离级别,read commit 可以避免死锁

5.添加合理的索引,可以减少死锁的概率。

排他锁演示

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

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

相关文章

软件测试面试最经典的5个问题

软件测试面试灵魂五问! 请做一下自我介绍?你为什么从上家公司离职?为什么转行做测试? 你对测试行业的认识?你的期望薪资是多少?最后,你要问我什么? 一、请做一下自我介绍 简历上有的可以一两…

C++ Concurrency in Action 2nd Edition

《C Concurrency in Action - SECOND EDITION》的中文翻译-面圈网 (mianshigee.com) C/C 学习教程源码-C/C源码推荐-面试哥 (mianshigee.com) 作者正是为C11标准引入线程库的C标准委员会成员本人!并且本书作者还编写了众多构成C标准的多线程和并发相关的提案、制定…

Apache Flink 1.12.0 on Yarn(3.1.1) 所遇到的問題

Apache Flink 1.12.0 on Yarn(3.1.1) 所遇到的問題 新搭建的FLINK集群出现的问题汇总 1.新搭建的Flink集群和Hadoop集群无法正常启动Flink任务 查看这个提交任务的日志无法发现有用的错误信息。 进一步查看yarn日志: 发现只有JobManager的错误日志出现了如下的…

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法

试利用栈的基本操作写出先序遍历二叉树的非递归形式的算法 代码思路: 要用栈解决先序遍历,我们首先要知道栈的性质和二叉树先序遍历的规则 栈最基本的就是先进后出 而二叉树先序遍历就是“根左右” 利用这两个性质,我们可以先将根结点入队…

【数智化案例展】领克汽车——火山引擎助力领克汽车数字化营销实践

‍ 火山引擎案例 本项目案例由火山引擎投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 领克汽车是由吉利汽车、沃尔沃汽车和吉利控股集团合资成立的全球新高端品牌。据吉…

SpringBoot + Vue2项目打包部署到服务器后,使用Nginx配置SSL证书,配置访问HTTP协议转HTTPS协议

配置nginx.conf文件,这个文件一般在/etc/nginx/...中,由于每个人的体质不一样,也有可能在别的路径里,自己找找... # 配置工作进程的最大连接数 events {worker_connections 1024; }# 配置HTTP服务 http {# 导入mime.types配置文件…

3D人像手办定制业务再掀热潮,这一次有怎样的革新?(方法篇)

最近,3D真人手办热潮再起,最出圈的一次当属亚运会的3D打印元宇宙体验舱里面各国运动员带火的真人手办定制项目。作为3D技术推广者,博雅仔也在后台接受了很多朋友的询问—— ◆ 技术已经成熟了吗? ◆ 个人定做3D真人手办市场价格…

【CSS】div 盒子居中的常用方法

<body><div class"main"><div class"box"></div></div> </body>绝对定位加 margin: auto; &#xff1a; <style>* {padding: 0;margin: 0;}.main {width: 400px;height: 400px;border: 2px solid #000;positio…

海康Visionmaster-全局触发:使用全局触发功能执行流 程的方法

我们这里以 TCP 通讯为例&#xff0c;视觉作为 TCP 服务端&#xff0c;与视觉交互的第三方设备作为 TCP 客户端。当 TCP 客户端连接上视觉服务端后&#xff0c;客户端发送字符串 T1,视觉执行流程 1&#xff1b; 客户端发送字符串 T2&#xff0c;视觉执行流程 2。 这样的需求我…

apachesolr启动带调试

这里solr.cmd报错&#xff0c;报错原因是java版本问题&#xff0c;后面发现这是因为多个java版本导致读取java_home失败&#xff0c; 那么我们修改solr.cmd中的JAVA_HOME为SOLR_JAVA_HOME IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME%SOLR_JAVA_HOME%"环境变量将SOLR…

linux傻瓜式安装Java环境及中间件

linux配置Java环境及中间件 1.傻瓜式安装Java1.下载2.追加3.刷新测试 2.傻瓜式安装docker1.docker卸载2.docker安装 3.Docker傻瓜式安装Redis1.傻瓜式安装安装并配置 4.Docker傻瓜式安装RabbitMQ5.Docker傻瓜式安装MySql1.拉取2.配置 6.傻瓜式安装Nacos1.官网下载nacos2.SQL文件…

皮肤病辅助诊断软件,基于Android编写

1.系统介绍 编写的皮肤病辅助诊断软件&#xff0c;包括皮肤病识别、皮肤病区域分割、皮肤病信息介绍、识别历史记录查询、简单图像处理操作以及本机信息查询等功能 2.登录界面 运行之后首先显示登录界面 3.注册界面 注册一个账号 4.主界面 输入用户名密码点击登录按钮…

NI-9236 国产化10 kS/s/ch,350 Ω四分之一桥应变计,8通道C系列应变/桥输入模块

10 kS/s/ch&#xff0c;350 Ω四分之一桥应变计&#xff0c;8通道C系列应变/桥输入模块 NI‑9236可同步测量所有通道的动态应变&#xff0c;从而实现了高速同步测量。 该功能对于需要在特定时刻对多个通道进行比较的应用&#xff08;例如冲击测试&#xff09;非常重要。\n\nNI…

Python基础入门例程42-NP42 公式计算器(运算符)

最近的博文&#xff1a; Python基础入门例程41-NP41 二进制位运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程40-NP40 俱乐部的成员&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程39-NP39 字符串之间的比较&#xff08;运算符&#xff09;-C…

mysql、clickhouse时间日期加法

mysql 在’2023-10-27 23:59:59’上增加5秒&#xff1a; SELECT DATE_ADD(2023-10-27 23:59:59, INTERVAL 5 second);clickhouse SELECT date_add(SECOND, 3, toDate(2018-01-01 00:00:00));clickhouse时间按秒、分、时、日、月、年作差 按秒&#xff1a; SELECT dateDiff…

「Verilog学习笔记」位拆分与运算

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 1、寄存器的位是可以分开单独运算的&#xff0c;并不是一个输入就一定是一个数据&#xff0c;在很多情况下&#xff0c;一个输入既包括数据又包括地址等其他有效信息 2、需…

Python基础入门例程43-NP43 判断布尔值(条件语句)

最近的博文&#xff1a; Python基础入门例程42-NP42 公式计算器&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程41-NP41 二进制位运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程40-NP40 俱乐部的成员&#xff08;运算符&#xff09;-CSDN博客…

ChinaSoft 论坛巡礼 | 系统与网络安全论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

基于STM32F412RET6的智能桶硬件设计

一、智能桶功能需求&#xff1a; 智能桶是一直采用Cortex-M4 嵌入式平台&#xff0c;搭载NB-IotTO通讯模组、智能称重采集、智能门锁监控以及温度监测等装置。主要功能如下&#xff1a; ▲ 具有GPS定位功能&#xff0c;可以通过后台APP实时定位智能桶的位置。 ▲ 具有温度监测功…

python栈_简单算术表达式_加减乘除

# 从左到右遍历中缀表达式中的每个数字和符号&#xff0c;若是数字就输出&#xff0c;即成为后缀表达式的一部分&#xff1b;若是符号则要分为两种情况&#xff1a; # (1)是括号时&#xff0c;如果是左括号&#xff0c;直接将左括号入栈&#xff0c;如果是右括号则栈顶元素依次…
最新文章