【问答分享第二弹】 Mysql的搜索引擎 ,看完暴虐面试官!

风二西CTF流量题大集合-刷题笔记|基础题(1) 部分题目已包含脚本和解题视频,但更建议自行分析和手搓脚本。 阅读详情

大家好,我是小于哥啊,前几天能分享了第二期面试题MySQL 中搜索引擎的面试考点,这道题是面试常温的面试,看完在数据库引擎方面,我相信你一定会有收获的

还没有看我第一分享的可以去参考下:

第一期分享: 【问答分享第一弹】关于MySQL行锁、表锁、排他锁、共享锁,看完吊打面试官!

首发于公众号【终端研发部】

核心点

1、搜索引擎InnoDB和MyIsam的区别和联系
2、Memory的相关的 知识的补充

目标

1、搜索引擎InnoDB和MyIsam的区别和联系
2、Memory的相关的 知识的补充
3、关于主键和外键的区别和联系
4、应用场景

关于主键和外键的区别和联系:

主键就是一个表的主关键字,能够唯一确定这条记录的。

外键就是参考主表中的某一个字段的值,一般是一个主键记录对应多个外键记录。一般是某一张表的一个外键字段引用另一张表的主键。

首先说一下 为什么MyISAM会比Innodb 的查询速度快。

NNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多;

(1)数据块,INNODB要缓存,MYISAM只缓存索引块, 这中间还有换进换出的减少;

(2)innodb寻址要映射到块,再到行,MYISAM 记录的直接是文件的OFFSET,定位比INNODB要快

(3)INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC ( Multi-Version Concurrency Control )多版本并发控制

InnoDB存储引擎

1、 InnoDB具有事务,回滚,崩溃修复能力和多版本并发的事务安全
2、关于InnoDB的auto_increment列:

InnoDB支持自动增长列,此列不能为空,且值必须唯一
此列必须为主键。插入时,不指定值,默认是自增都的值。指定0或者NULL时,也 是自增后的值。指定合法且不存在的值,则此后的自动从该值开始
3、InnoDB中的Foreign Key:
InnoDB支持外键。外键所在表通常称为子表。所依赖表称为父表。且父表中,被子表关联的字段必须为父表的主键。
(外键:可以简单的理解为:当对父表的数据进行更新,删除,添加时,子表的数据也会随之变化。例子很多,此处不举例)
4、InnoDB的存储引擎及其优缺点:
InnoDB存储引擎的存储格式有三个文件:
.frm表结构文件,此文件存放表创建时的字段定义等信息。
表的数据文件,存放在innodb_data_home_dir目录下,
表的索引文件,存放在innodb_data_file_path目录下
InnoDB存储引擎具有良好的ACID特性。
InnoDB的缺点:读写效率相对MYISAM比较差。占用的磁盘空间比较大。
5、InnoDB的理想使用场合:
高并发,更新操作比较多的表。需要使用事务的表。对自动灾难恢复有要求的表。

3:MYISAM存储引擎:

1、MYISAM存储引擎表的存储有三个文件:

.frm文件,存储表的结构
.myd文件,存储表的数据
.myi文件,存储表的索引

2、MYISAM存储引擎的存储格式

静态型
动态型

缩型:

3、MYISAM存储引擎的优缺点:

优点:占用空间小,处理速度快(相对InnoDB来说)
确定:不支持事务的完整性和并发性

总结

(1).事务处理:

MyISAM是非事务安全型的,而InnoDB是事务安全型的(支持事务处理等)

(2).锁机制不同:

MyISAM是表锁,InnoDB是行级锁。

(3).增删改查操作:

MyISAM:如果执行大量的查询操作,MyISAM是更好的选择

InnoDB:如果你的数据执行大量的插入/更新,出于性能方面的考虑,应该使用InnoDB表

(4).查询表的行数不用:

MyISAM: 执行select count() from table语句时 MyISAM只需要简单的查询出保存好的行数,当count()语句包含 where条件时,两种表的操作是一样的。

InnoDB: InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

(5).外键

MyISAM不支持外键

mysiam表不支持外键,而InnoDB支持

补充 Memory存储引擎

Memory存储引擎的文件存储形式
Memory存储引擎也会再磁盘上形成一个 .frm的表结构文件,只是表的数据件并不以文件的形式存放在磁盘上。鉴于其数据存放在内存里,因此,访问速度更快。但需 要考虑的是:内存上数据的持久性。

Memory存储引擎的索引类型

默认 哈希索引

支持BTree索引

Memory特点

Memory存储引擎的数据存储周期 数据存放在内存上,一旦服务器关机,数据将不再存在

Memory存储引擎的优缺点:

Memory存储引擎不支持变长表列
MySQL4.1.0之前,不支持auto_increment列

使用场景

1、 MyISAM适合:

(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。

2、InnoDB适合:

(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且行锁定的机会比较大的情况。

3、Memory存储引擎的使用场合

速度要求快的,临时数据
丢失以后,对项目整体没有或者负面影响不大的时候。

ps: 如何学习java ,推荐两个白嫖学习的资料:

1、书籍:

codeGoogler/ProgramBooks

2:视频教程:

全网免费Java资源下载SpringBoot、Spring、Mybatis、Redis、RabbitMQ、SpringCloud、高并发(持续更新)_这个时代,作为程序员可能要学习小程序-优快云博客

最后

最后,照旧安利一波我们的工种号:「终端研发部」,目前每天都会推荐一篇优质的技术相关的文章,主要分享java相关的技术与面试技巧,我们的目标是:知道是什么,为什么,打好基础,做好每一点!这个主创技术公众号超级值得大家关注。

如果你有什么技术上的问题,都可以咨询我,技术路上漫长而优雅, 于哥可以一直陪伴。如果有帮助,欢迎点赞!

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明 本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。 阅读详情

相关推荐

直流电机双闭环调速系统MATLAB仿真

Chopper-Fed DC Motor Drive This example shows a Chopper-Fed DC Motor Drive. Description The DC motor is fed by the DC source through a chopper which consists of GTO thyristor and free-wheeling diode ...

飞行动力的博客 2万+

Mybatis事务提交问题

今天遇到了mybatis执行增删改时,没有通过事务提交,即sqlSession.commit();sql语句就直接完成了对数据库的操作,首先怀疑了sqlSession的默认设置问题,是否是自动提交,排查之后,发现是数据库的引擎问题,将表数据提取之后,将引擎从MyIsAM改为了Inodb引擎, 各个数据库引擎直接的区别 MyISAM这种存储引擎不支持事务。 MyISAM是mysql最常用的存储引擎,但是这种引擎不是默认的 它管理的表具有以下特征:使用三个文件表示每个表 格式文件-存储表结构的定义(tab

SuperDream1sd的博客 1412

M2DGR数据集在主流SLAM框架中的实战配置指南:从ORB-SLAM到FAST-LIO的完整流程

本文提供了M2DGR多传感器数据集在主流SLAM框架中的实战配置指南。详细介绍了从ORB-SLAM、VINS-Mono等视觉/视觉惯性框架,到A-LOAM、FAST-LIO等激光/激光惯性框架的完整配置流程、参数调整要点及常见问题解决方案。通过实际测试对比,分析了各算法在M2DGR数据集上的表现,为机器人定位与建图研究提供了宝贵的实战经验。

k9l0m1的博客 481

终极办法:解决spring mvc+mysql+mybatis事务不提交不回滚的问题

网上逛了一大圈,终于解决了,我是网文搬运工,把我解决的过程放出来供大家参考。 首先:要确定你的数据库是否是支持事务,再往下看 一:事务使用。 先来一个普级稿,几种事务的配置方法: 1. myBatis单独使用时,使用SqlSession来处理事务: Java代码   public class MyBatisTxTest {        privat

aattxx的博客 1万+

迪文屏【0】——从零搭建工程:图片显示、文本变量配置与串口数据交互实战

本文以迪文屏T5L系列为例,详细介绍了从零搭建HMI工程的完整流程。内容涵盖硬件软件准备、DGUS工程创建、背景图片显示、文本变量配置,并重点演示了如何通过串口指令实时修改屏幕数据变量,实现动态交互。旨在帮助开发者快速掌握迪文屏开发的核心步骤与数据交互方法。

alpha的博客 349

银河麒麟V10 SP3下NFS客户端挂载失败?5个常见问题排查与修复

本文针对银河麒麟V10 SP3系统中NFS客户端挂载失败的常见问题,提供了5个实战排查方案。从基础服务状态检查到防火墙配置、版本兼容性、/etc/fstab设置及权限映射,详细解析了问题根源与解决方案,帮助用户快速恢复NFS文件共享功能。

weixin_42525005的博客 358

初学MyBatis的疑问:1、为什么JDBC默认自动提交事务,MyBatis中却需要自己手动提交事务

如果使用MyBatis默认的事务管理方式(即openSession()方法获取的SqlSession对象),该SqlSession对象是默认不会自动提交事务的,也就是需要手动调用commit()方法来提交事务,或调用rollback()方法来回滚事务。这样可以保证所有SQL语句都成功执行才进行事务的提交,否则会进行回滚操作,保证数据的一致性。虽然在JDBC中默认是开启自动提交事务的,但是在实际应用中,很多情况下需要将多个操作组合成一个原子性的操作,这就需要使用事务来保证数据的一致性。

qq_45785650的博客 2636

Matlab R2024a硬件支持包安装避坑指南:以Arduino为例(附离线包下载)

本文详细介绍了Matlab R2024a硬件支持包(Support Package)的安装流程,特别是针对Arduino平台的避坑指南和高效部署方法。从环境准备、离线安装方案到Arduino支持包的专项优化,提供了全面的技术细节和解决方案,帮助开发者避免常见错误,实现快速部署。

weixin_33737134的博客 446

事务不提交问题解决思路

​ 开发中偶尔会遇到sql已经执行,日志都打印出来了但是数据并没有任何变化,此时多半为事务没有提交,下面记录一下最近一段时间遇到的事务没有提交的问题排查思路,下文默认可以本地debu复现问题,如果是无法debug的环境只是增加了获取相应数据的复杂度(无法debug),以及查看相应数据的复杂的(需要打日志才看得到)等等,原理并没有变化 首先查看执行sql的方法是否已经开启了事务 有时可能会因为事务切面没有切到,或者没有打注解等等原因导致事务没有生效,此时可以在执行sql的方法处打断点,然后执行 Transac

dstears的博客 5480

AI大模型API中转站选型指南:12项关键指标与实战评估

随着AI大模型技术的快速迭代,企业面临着一个核心挑战:如何在基础模型频繁更新的背景下,为业务系统选择稳定可靠的API中转服务?本文基于真实生产环境测试数据,从12个关键维度系统评估主流API中转站平台,帮助技术团队在模型快速演进的生态中做出科学选型决策。 1. API中转站的核心价值与业务场景 1.1 什么是API中转站 API中转站(API Gateway/Aggregator)是连接业务系统与多个大模型厂商的中间层服务。它通过统一的接口封装了不同厂商的API协议差异,为企业提供标准化的模型调用能力。在实

weixin_29056101的博客 442

MEME-CHIP实战:5步搞定ChIP-seq数据中的motif发现与可视化

本文提供了使用MEME-CHIP工具进行ChIP-seq数据motif发现与可视化的完整实战指南。通过5个清晰步骤,从数据准备、环境搭建、命令行执行到结果解读与高级可视化,详细讲解了如何利用MEME-CHIP工作流高效完成从原始peak序列到发表级motif图的分析,并分享了关键的参数调优与避坑经验。

alice7model的博客 508

mybatis中没有删除成功的原因:没有手动提交事务

第一种情况没有删除成功,因为自动提交为false,需要手动提交,即sqlSession.commit() 第二种加了sqlSession.commit()后才删除成功 2020-09-29 19:31:23,842 405 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection 2020-09-29 19:31:25,505 2068 [ main] DEBUG sour

weixin_45872600的博客 1628

深入剖析RDMA Netlink:Linux内核中高效通信的基石

RDMA Netlink:Linux内核中高效通信控制的核心机制 RDMA技术通过绕过内核实现高速数据传输,但其管理控制仍需内核参与。drivers/infiniband/core/netlink.c文件作为RDMA子系统的心脏,构建了用户空间与内核间的高效通信桥梁。该模块采用模块化客户端架构,通过全局数组管理不同类型的RDMA功能,如设备管理、连接服务和链路层操作。从最初的全局锁到细粒度读写锁的演进,展现了Linux内核追求高性能的持续优化。同时,通过条件编译支持新旧内核版本和网络命名空间,体现了稳定性与

数字人生 238

mybatis源码解析之 mybatis如何完成自动帮我们完成事务的开启,提交与回滚

先看一部分代码 这里面有一些值得注意的地方 public void insertUser(User user) { try { //加载主配置文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); //创建sqlSessionFac...

qq_32459653的博客 3500

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MyBatis学习总结(三)MyBatis 的连接池技术MyBatis 的事务控制手动提交事务MyBatis 的动态 SQL 语句MyBatis 多表查询一对一、多对一、一对多、多对多查询

MyBatis学习总结(三)MyBatis 的连接池技术/MyBatis 的事务控制/手动提交事务/MyBatis 的动态 SQL 语句/MyBatis 多表查询/一对一、多对一、一对多、多对多查询 一、MyBatis 的连接池技术分类 连接池就是一个用于存储连接的容器。这个容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程同时拿到同一个连接。该集合还必须有队列的特性:先进先出(归还的连接放在连接池队列的末尾)。 我们在实际开发中都会使用数据库连接池,因为它可以减少我们获取连接所消耗的时间。

long3359的博客 705

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Spring中的事务

spring中的事务

apple_60924227的博客 318

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

使用Mybatis执行insert、update和delete操作时自动提交(默认不会自动提交)

单独使用Mybaits,而没有集成Spring的话,执行insert、update和delete操作是不会自动提交的,即执行语句后不会在数据库有对应的数据变化。 解决这样的方法就是打开自动提交开关,在创建session时,输入参数为true即可: try { InputStream inputStream = Resources.getResourceAsStream(resource); // 创建工厂 sqlSessionFactor

你羡慕的生活都是你没熬过的苦。 3169

mybatis删除mysql提交事务,终极办法:解决spring mvc+mysql+mybatis事务不提交不回滚的问题-Go语言中文社区...

一:ContextLoaderListener加载内容二:DispatcherServlt加载内容ContextLoaderListener和DispatcherServlet都会在Web容器启动的时候加载一下bean配置. 区别在于:DispatcherServlet一般会加载MVC相关的bean配置管理(如: ViewResolver, Controller, MultipartResolve...

weixin_29405101的博客 283

在 MyBatis-Plus 中处理事务问题:确保数据正确提交与回滚

在使用 MyBatis-Plus 进行开发时,正确管理事务非常重要,以保证数据的一致性和完整性。通过合理配置注解、确保数据库操作在同一事务中执行以及检查事务管理器与数据库的兼容性,可以有效避免事务相关的问题。希望这篇文章能够帮助你更好地理解和解决 MyBatis-Plus 中的事务管理问题,提升系统的稳定性和可靠性。通过对事务管理的理解与操作,你不仅能解决事务问题,还能优化应用程序的可靠性和性能。使用注解正确地管理事务,将使得你对数据库操作更加得心应手,同时减少数据丢失和不一致的风险。

一碗黄焖鸡三碗米饭的博客 1783

Spring与Mybatis整合后批量新增执行成功但是数据没提交到数据库

Spring与Mybatis整合,在开发导入功能时,在Mybatis中增加了一个insertBath方法。 由于原项目的代码结构划分不是很清晰,左右操作都是放到Service下,新功能开发时,将代码结构做了细化, 导致在insert数据时,系统表象是执行成功,而却Mybatis打出的日志也显示成功,并且显示成功条数,但是在后台查看,数据库中并没有数据,从而进行了问题排查。 首先先到的是Myb...

7306

java mybatis开启事务_Mybatis系列之设置自动提交事务

@目录业务描述:最近遇到业务很复杂的方法,有通过Spring的@Transactional注解开启事务的,不过在ie11出现bug,console日志打印已经update成功的SQL,方法很长,执行成功后,发现数据没有修改,这个和console日志打印不符合,问题比较难排查,然后通过网上资料个自己尝试fix bug,不过具体原因没有想清,浏览器本身就和事务处理没关系,为什么在不同浏览器会不同效果,...

weixin_34199121的博客 2002

mybatis中commit和rollback使用不当造成事务泄露和锁超时问题总结

commit接口定义如下:   /**    * Flushes batch statements and commits database connection.    * Note that database connection will not be committed if no updates/deletes/inserts were called.    * To for

lsletter的专栏 8677

Qt Creator 模块学习 ——2D绘图(不规则窗口)

不规则窗口 其实对于窗口而言,包括边框,菜单栏,工具栏,核心控件,状态栏等等,而不规则窗口就是可以隐藏边框,甚至隐藏窗口背景。 //去窗口边框 setWindowFlags(Qt::FramelessWindowHint | windowFlags()); //窗口背景透明 setAttribute(Qt::WA_TranslucentBackground); 很简单的代码就可以做到,但是我们除了这个还得要做到的是,当我们把窗口隐藏了,我们如何关闭窗口,或者移动窗口,这里除了写按钮外,我

m0_50210478的博客 492

MySQL中Spring管理的事务开启后不提交引起的事故

了解到一个事故,在MySQL数据库中,使用Spring管理的事务在开启以后没有在操作结束时提交或回滚,使得原有线程在后续执行数据库操作时可能继续使用原有事务,且不会提交,导致对数据库的修改在Java应用层认为是成功,但在数据库层最终是没有生效的,产生了比较严重的后果

adrninistrat0r的博客 9982
上一篇: 阿里2021最全新的java面试题总结
下一篇: 30k的大佬告诉你怎么入门编程行业?
84696zuoguwz
博客等级 码龄5年 12粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值