技术总结 | MySQL面试知识点

news2025/2/21 10:12:16

存储引擎

Mysql 中的存储引擎

  1. 查询存储引擎的命令 show engines;
    在这里插入图片描述

  2. Archive
    只支持 insert 与select操作,
    不支持索引
    不支持事务
    适用于存储需要长期保存,但是很少访问的数据,例如 历史日志

  3. BlackHole
    不存储数据,但是会记录写入操作
    适用于性能测试 语言验证等情况

  4. MyISAM
    高性能读操作
    表级别锁
    不支持事务
    不支持外键
    索引存储结构采用的B+tree 非聚集索引
    生成文件为三个文件 表结构文件.sdi 数据文件.MYD 索引文件.MYI
    支持全文索引
    不支持数据缓存
    适用于读多写少 不需要事务 不需要外键的场景

  5. InnoDB 重点
    支持外键
    支持事务
    支持行级锁
    支持MVCC多版本并发控制
    索引结构采用的B+tree结构 聚集索引(主键与数据存储在一起)
    适用于对数据完整性与一致性要求严格的场景

  6. Memory
    缓存存储,数据存储在缓存中,不存到磁盘上
    读写速度快
    支持事务
    支持索引
    索引结构 支持hash 与btree 默认采用hash

  7. CSV
    以CSV格式存储数据
    不支持外键、事务、索引

事务

  1. 什么是事务
    事务是一种机制,用来保证数据的一致性与完整性,要么全部完成,要么全部失败

  2. 事务的特性
    ACID 原子性 一致性 隔离性 持久性
    A 原子性: 通过undolog 来实现的
    C 一致性: 通过其他三个特性来保证数据的一致性
    I 隔离性: 通过锁与MVCC机制来保证数据的隔离性
    D 持久性: 通过redolog来实现的

  3. 事务的操作sql
    start transaction; #开启事务
    commit; 提交事务
    rollback; 回滚事务

  4. 事务的隔离级别
    读未提交 read-uncommitted: 会产生不可重复读 幻读 脏读
    读已提交 read-committed: orcale 默认隔离级别 会产生不可重复读 幻读
    可重复读 repeatable read: Mysql 默认隔离级别 会产生重复读 幻读
    序列化 serializable: 最高的隔离级别, 通过强制事务排序 来解决幻读, 在所有的读操作都会默认机上读锁

三大日志

  1. undo log 回滚日志
    undolog 用户保证数据的原子性
    undolog 会存储修改数据之前的旧值,用户事务回滚 或者 MVCC机制旧数据构建的支持

  2. redo log 重做日志
    redolog 是来保证事务持久性的日志文件

在事务提交的时,日志缓存区的内容会先写到redolog中,然后再写入到磁盘数据文件中,

磁盘的随机写比较耗时,而redolog 是顺序写,redolog的顺序写高于随机写,所以会先将修改记录写到redolog中

当数据库重启的时候会先读取redolog中的记录重新执行这些修改操作,将数据恢复到提交后的状态,保证数据的一致性持久性

  1. bin log 二进制日志
    binlog是记录了数据库表结构与表数据的增删改操作的二进制文件
    用于数据恢复
    主从复制
    mysql5.7之后是默认开启的

MVCC 多版本并发控制

  1. MVCC多版本并发控制
    MVCC: 是一种并发控制技术,实现数据库的高效并发访问,允许在同一时间内多个事务对同一数据进行读取操作

  2. MVCC 工作原理
    首选需要了解
    事务ID: 在Innodb存储引擎中,会为每一个事务分配一个唯一的事务ID,这个ID是递增的
    版本号: Innodb中每行数据上都会有隐藏的创建版本号与删除版本号, 这个数据的版本号就是操作数据的事务ID

MVCC 是 通过每行数据上隐藏的创建版本号删除版本号结合事务ID来做到的, 通过事务ID 与数据的创建版本号、删除版本号的比较来判断出这个事务可以看到的数据范围 ,
当前事务所能看到的数据范围是: 当前事务ID >= 创建版本号 并且当前事务ID < 删除版本号 的数据,如果版本号大于当前事务ID, 那么会通过undo log 来构建旧版本数据,来保证读取的数据是这个事务之前的数据

  1. MVCC 用途
    保证并发性能
    保证事务的隔离性

索引结构

  1. Hash
    Hash的结构是数组+链表的形式, 不支持范围查询,存在hash冲突的情况

  2. 红黑树
    红黑树又叫二叉查找树, 节点下边只有两个分支,数据多的情况层级会很高,影响查询

  3. Btree
    Btree节点支持存储多个数据,分支有多个分支,节点存储的可能是索引或者是数据或者是数据的物理地址

  4. B+tree
    B+tree节点支持存储多个数据,分支也有多个分支,主键索引树,非叶子节点是冗余出来的索引,叶子节点存储的是索引与数据,由于非叶子节点存储的之后索引数据 相较于Btree可以存储更多的索引,层级也会更低, 同时叶子节点之间有双向链表关联,更便于范围查询

SQL 优化

  1. 创建索引创建在不为null 并且重复值少的列, 索引字段尽量不频繁改动
  2. 通过explain 执行计划 来查看sql是否命中索引
  3. like 与 组合索引 遵从最左前缀原则
  4. 使用 EXISTS 替代 IN
  5. 调整MySQL内存分配
  6. 索引列不要使用表达式或者函数操作会破会索引值的有序性 会失效
  7. 注意类型的隐式转换,比如数值类型 使用字符串判断

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下Ollama下载安装速度过慢的解决方法

问题描述&#xff1a;在Linux下使用默认安装指令安装Ollama&#xff0c;下载安装速度过慢&#xff0c;进度条进度缓慢&#xff0c;一直处于Downloading Linux amd64 bundle中&#xff0c;具体如下图所示&#xff1a; 其中&#xff0c;默认的Ollama Linux端安装指令如下&#xf…

关于redis的主从复制(下)

目录 全量复制 关于replid和runid 部分复制 补充问题 实时复制 psync可以从主节点获取全量数据&#xff0c;也可以获取一部分数据。主要就是看offset的进度&#xff0c;如果offset写作-1&#xff0c;就是获取全量数据。offset写具体的正整数&#xff0c;则是从当前偏移量位…

uniapp uni.request重复请求处理

类似这种切换tab时&#xff0c;如果操作很快并且网络不太好&#xff0c;就出现数据错乱&#xff0c;在网上查了一圈&#xff0c;有一个使用uview拦截处理的&#xff0c;但是原生uni.requse没有找到详细的解决办法&#xff0c;就查到使用 abort 方法&#xff0c;我自己封装了一个…

【大模型】DeepSeek:AI浪潮中的破局者

【大模型】DeepSeek&#xff1a;AI浪潮中的破局者 引言&#xff1a;AI 新时代的弄潮儿DeepSeek&#xff1a;横空出世展锋芒&#xff08;一&#xff09;诞生背景与发展历程&#xff08;二&#xff09;全球影响力初显 探秘 DeepSeek 的技术内核&#xff08;一&#xff09;独特的模…

SOME/IP--协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2 Speci…

用PyInstaller构建动态脚本执行器:嵌入式Python解释器与模块打包 - 简明教程

技术场景&#xff1a; 需分发的Python工具要求终端用户可动态修改执行逻辑将Python环境与指定库&#xff08;如NumPy/Pandas&#xff09;嵌入可执行文件实现"一次打包&#xff0c;动态扩展"的轻量化解决方案。 ▌ 架构设计原理 1. 双模运行时识别 # 核心判断逻辑…

在做题中学习(89):螺旋矩阵

解法&#xff1a;模拟 思路&#xff1a;创建ret数组&#xff0c;用变量标记原矩阵的行数和列数&#xff0c;遍历一个元素就push_back进ret数组&#xff0c;每次遍历完一行或一列&#xff0c;相应行/列数--&#xff0c;进行顺时针螺旋遍历到为0即可。 细节&#xff1a;要有边界…

从零搭建微服务项目Base(第5章——SpringBoot项目LogBack日志配置+Feign使用)

前言&#xff1a; 本章主要在原有项目上添加了日志配置&#xff0c;对SpringBoot默认的logback的配置进行了自定义修改&#xff0c;并详细阐述了xml文件配置要点&#xff08;只对日志配置感兴趣的小伙伴可选择直接跳到第三节&#xff09;&#xff0c;并使用Feign代替原有RestT…

【数据分析】通过个体和遗址层面的遗传相关性网络分析

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理应用场景加载R包数据下载函数个体层面的遗传相关性网络分析导入数据数据预处理构建遗传相关性的个体网络对个体网络Nij进行可视化评估和选择最佳模型评估和选择最佳模型最佳模型…

在 macOS 的 ARM 架构上按住 Command (⌘) + Shift + .(点)。这将暂时显示隐藏文件和文件夹。

在 macOS 的 ARM 架构&#xff08;如 M1/M2 系列的 Mac&#xff09;上&#xff0c;设置 Finder&#xff08;访达&#xff09;来显示隐藏文件夹的步骤如下&#xff1a; 使用快捷键临时显示隐藏文件&#xff1a; 在Finder中按住 Command (⌘) Shift .&#xff08;点&#xff…

【产品经理】需求分析方法论+实践

阐述了需求分析的基本认知&#xff0c;包括需求分析的定义、原则和内容。接着&#xff0c;文章详细介绍了需求分析的十个步骤&#xff0c;从收集需求到结果评审&#xff0c;为产品经理提供了清晰的操作指南。 作为产品经理&#xff0c;需求分析是一个最基本的工作&#xff0c;但…

Windows平台的小工具,功能实用!

今天给大家分享一款超实用的Windows平台监控工具&#xff0c;堪称“桌面小管家”&#xff0c;能帮你轻松掌握电脑的各种运行状态&#xff0c;比如网速、下载速度、内存和CPU占用率等常用参数&#xff0c;让你的电脑运行情况一目了然。 TrafficMonitor 网速监控悬浮窗软件 这款…

SAP-工单技术性关闭操作手册

文章目录 单个工单批量处理TECO和CLSD标识的区别 单个工单 事务代码CO02&#xff0c;输入工单号后回车 功能-》限制处理-》技术性完成 工单状态更改 撤销TECO操作 CO02输入工单号&#xff0c;功能-》限制处理-》撤销技术性完成 批量处理 事务代码COHV&#xff0c;点击生…

Aseprite绘画流程案例(1)——画相机图标

原图&#xff1a; 步骤一&#xff1a;打开需要参照的图标 步骤二&#xff1a;将参照的图片拖放到右边&#xff0c;作为参考 步骤三&#xff1a;新建24x24的画布&#xff0c;背景为白色的画布 步骤四&#xff1a;点击菜单栏——视图——显示——像素网格&#xff08;如果画布已经…

安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法

硬件&#xff1a;雷神MIX G139H047LD 工控机 系统&#xff1a;ubuntu20.04 之前运行某项目时&#xff0c;处于正常状态。后来由于要使用海康威视工业相机&#xff08;型号&#xff1a;MV-CA013-21UC&#xff09;&#xff0c;便下载了并安装了该相机的SDK&#xff0c;之后运行…

云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色

一、Ansible-playbook实战 1.Ansible-playbook安装软件 bash #编写yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #检查playbook的语法 [rootansible ansible]…

网络工程师 (47)QOS

一、概念与原理 QOS即服务质量&#xff08;Quality of Service&#xff09;是一种网络技术&#xff0c;用于管理和保证网络中不同类型的质量和性能。它通过设置优先级和带宽限制等策略&#xff0c;确保关键应用&#xff08;如视频会议、语音通信&#xff09;的数据包能够在网络…

风铃摇晃的弧度与不安等长

晴&#xff0c;2025年2月19日 的确是&#xff0c;有依靠又有谁会去自己打伞。是啊&#xff0c;有时候生活推着我们走的样子确实挺无力的。不过谁都愿意携手走的&#xff0c;希望有一天再也不用“抛头露面”了吧。 又下载回了 X &#xff0c;马上 Gork 3 可以使用&#xff0c…

Linux部署DeepSeek r1 模型训练

之前写过一篇windows下部署deepseekR1的文章&#xff0c;有小伙伴反馈提供一篇linux下部署DeepSeek r1 模型训练教程&#xff0c;在 Linux 环境下&#xff0c;我找了足够的相关资料&#xff0c;花费了一些时间&#xff0c;我成功部署了 DeepSeek R1 模型训练任务&#xff0c;结…

JetBrains 2024开发者生态报告 -你尝试过用VR头戴设备编程吗

JetBrains 2024开发者生态报告&#xff1a;核心洞察 方法论 覆盖 171 个国家/地区 的 23,262 名开发者 。数据按区域开发者数量和就业状态加权。 主要趋势 AI 整合 80% 的公司允许使用第三方 AI 工具&#xff08;如 ChatGPT、Copilot&#xff09;。18% 的开发者将 AI 集成到产…