技术总结 | MySQL面试知识点

MySQL面试知识点

  • 1.存储引擎
    • 1.1 Archive
    • 1.2 BlackHole
    • 1.3 MyISAM
    • 1.4 InnoDB (重点记一下哦)
    • 1.5 Memory
    • 1.6 CSV
  • 2. 事务
    • 2.1. 什么是事务
    • 2.2. 事务的特性
    • 2.3. 事务的操作sql
    • 2.4. 事务的隔离级别
  • 3.三大日志
  • 3.1. undo log 回滚日志
  • 3.2. redo log 重做日志
  • 3.3. bin log 二进制日志
  • 4. MVCC 多版本并发控制
    • 4.1. 介绍
    • 4.2. MVCC 工作原理
    • 4.3. MVCC 用途
  • 5. 索引结构
    • 5.1. Hash
    • 5.2. 红黑树
    • 5.3. Btree
    • 5.4. B+tree
  • 6. SQL 优化
  • 有总结的不对的地方/或者问题 请指正, 我在努力中

1.存储引擎

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

1.1 Archive

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

1.2 BlackHole

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

1.3 MyISAM

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

1.4 InnoDB (重点记一下哦)

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

1.5 Memory

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

1.6 CSV

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

2. 事务

2.1. 什么是事务

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

2.2. 事务的特性

** ACID 原子性 一致性 隔离性 持久性 **

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

2.3. 事务的操作sql

start transaction; #开启事务
commit; 提交事务
rollback; 回滚事务

2.4. 事务的隔离级别

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

3.三大日志

3.1. undo log 回滚日志

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

3.2. redo log 重做日志

redolog 是来保证事务持久性的日志文件

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

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

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

3.3. bin log 二进制日志

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

4. MVCC 多版本并发控制

4.1. 介绍

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

4.2. MVCC 工作原理

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

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

4.3. MVCC 用途

保证并发性能
保证事务的隔离性

5. 索引结构

5.1. Hash

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

5.2. 红黑树

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

5.3. Btree

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

5.4. B+tree

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

6. SQL 优化

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

有总结的不对的地方/或者问题 请指正, 我在努力中

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

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

相关文章

DeepSeek模型快速部署教程-搭建自己的DeepSeek

前言&#xff1a;在人工智能技术飞速发展的今天&#xff0c;深度学习模型已成为推动各行各业智能化转型的核心驱动力。DeepSeek 作为一款领先的 AI 模型&#xff0c;凭借其高效的性能和灵活的部署方式&#xff0c;受到了广泛关注。无论是自然语言处理、图像识别&#xff0c;还是…

图论 之 BFS

文章目录 3243.新增道路查询后的最短距离1311.获取你好友已观看的视频 BFS:广度优先搜索&#xff08;BFS&#xff09; 是一种常用的算法&#xff0c;通常用于解决图或树的遍历问题&#xff0c;尤其是寻找最短路径或层级遍历的场景。BFS 的核心思想是使用队列&#xff08;FIFO 数…

VSCode集成deepseek使用介绍(Visual Studio Code)

VSCode集成deepseek使用介绍&#xff08;Visual Studio Code&#xff09; 1. 简介 随着AI辅助编程工具的快速发展&#xff0c;VSCode作为一款轻量级、高度可扩展的代码编辑器&#xff0c;已成为开发者首选的工具之一。DeepSeek作为AI模型&#xff0c;结合Roo Code插件&#x…

Qt中利用httplib调用https接口

httplib中如果要调用https接口&#xff0c;需要开启OPENSSL支持&#xff0c;经过半天坑爹得摸索&#xff0c;总结下经验。 1&#xff0c;下载 并安装Win64OpenSSL 地址如下&#xff0c;我Qt版本是5.15.2 &#xff0c;openssl选择的是 64位&#xff08;Win64OpenSSL-3_3_3.msi…

使用Geotools读取DEM地形数据实战-以湖南省30米数据为例

目录 前言 一、DEM地形数据介绍 1、DEM数据简介 2、DEM应用领域 3、QGIS中读取DEM数据 二、GeoTools解析地形 1、Maven中依赖引用 2、获取数据基本信息 三、总结 前言 随着全球数字化进程的加速&#xff0c;各类地理空间数据呈爆炸式增长&#xff0c;DEM 数据作为其中的…

登录-01.基础登录功能

一.需求分析 当前的页面不需要登录就可以进入&#xff0c;十分不安全&#xff0c;因此要设置登录功能来维护系统的安全性。登录时要根据输入的用户名和密码进行登录校验&#xff0c;如果在数据库中没有找到匹配的用户名和密码的话&#xff0c;那么就无法登录。 因此要先根据用…

调用click.getchar()时Windows PyCharm无法模拟键盘输入

文章目录 问题描述解决方案参考文献 问题描述 调用 click.getchar() 时&#xff0c;Windows PyCharm 无法模拟键盘输入 解决方案 Run → Edit Configurations… → Modify options → Emulate terminal in output console 参考文献 Terminal emulator | PyCharm Documentati…

京东杀入外卖界,这波操作到底香不香?

京东杀入外卖界&#xff0c;这波操作到底香不香&#xff1f; 最近外卖圈炸了&#xff01;京东这个电商巨头&#xff0c;居然一声不吭地搞起了外卖&#xff01;一出手就是0佣金&#xff0c;品质堂食 两大杀招&#xff0c;直接把美团、饿了么整懵了。今天咱们就来唠唠&#xff0…

PTH 哈希传递攻击

参考文章&#xff1a;内网渗透 | 哈希传递攻击(Pass-the-Hash,PtH)-腾讯云开发者社区-腾讯云 哈希传递攻击(Pass-the-Hash,PtH)_c 实现 pass the hash功能-CSDN博客 域控机器账户&#xff1a;WIN-0V0GAORDC17 域控 ip&#xff1a;192.168.72.163 域内攻击者机器 ip&#xf…

Vue3项目,蛋糕商城系统

简单的vue3商城 蛋糕商城系统 下单平台 带用户 登录 注册 首页轮播图 购物车后台管理 商品订单 登录注册 商品详情 纯前端无后台、无数据库 纯Vue3项目作业 vue3 setup语法糖写法 技术实现 本项目主要使用如下技术实现&#xff0c; - 基于vue3vite搭建的项目框架 -…

快速上手gdb/cgdb

Linux调试器-gdb使用 1.背景2.调试原理、技巧命令2.1指令2.2 本质2.3 技巧 1.背景 程序的发布方式有两种&#xff0c;debug模式和release模式 Linux gcc/g出来的二进制程序&#xff0c;默认是release模式 要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g…

LLM增强强化学习:开启智能决策的新篇章

标题期刊年份关键词Survey on Large Language Model-Enhanced Reinforcement Learning: Concept, Taxonomy, and MethodsIEEE Transactions on Neural Networks and Learning Systems2024Reinforcement learning (RL), large language models (LLM), vision-language models (V…

ECMAScript6------数组扩展

ECMAScript6------数组扩展 1.扩展运算符1.1 含义1.2 应用(1)复制数组(浅拷贝)(2)合并数组(3)与解构赋值结合(4)字符串(5)实现了Iterator接口的对象(6)Map和Set结构,Generator 函数 2.Array.from和Array.of(1)Array.from(2)Array.of 3.新增的实例方法(1)copyWithin()(2)find(回…

C++,设计模式,【工厂方法模式】

文章目录 如何用汽车生产线理解工厂方法模式?一、传统生产方式的困境二、工厂方法模式解决方案三、模式应用场景四、模式优势分析五、现实应用启示✅C++,设计模式,【目录篇】 如何用汽车生产线理解工厂方法模式? 某个早晨,某车企CEO看着会议室里堆积如面的新车订单皱起眉…

Web入侵实战分析-常见web攻击类应急处置实验2

场景说明 某天运维人员&#xff0c;发现运维的公司站点被黑页&#xff0c;首页标题被篡改&#xff0c;你获得的信息如下&#xff1a; 操作系统&#xff1a;windows server 2008 R2业务&#xff1a;公司官网网站架构&#xff1a;通过phpstudy运行apache mysqlphp开放端口&…

企业内部知识库:安全协作打造企业智慧运营基石

内容概要 作为企业智慧运营的核心载体&#xff0c;企业内部知识库通过结构化的信息聚合与动态化的知识流动&#xff0c;为组织提供了从数据沉淀到价值转化的系统性框架。其底层架构以权限管理为核心&#xff0c;依托数据加密技术构建多层级访问控制机制&#xff0c;确保敏感信…

第十二届先进制造技术与材料工程国际学术会议 (AMTME 2025)

重要信息 大会官网&#xff1a;www.amtme.org&#xff08;了解会议&#xff0c;投稿等&#xff09; 大会时间&#xff1a;2025年3月21-23日 大会地点&#xff1a;中国-广州 简介 2025年第十二届先进制造技术与材料工程 (AMTME 2025) 定于2025年3月21-23日在中国广州隆重举…

[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植

最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台&#xff0c;现在已经移植了&#xff0c;尝试了下效果&#xff0c;降噪效果很显著&#xff0c;噪声带被显著抑制了 降噪前&#xff1a; 降噪后&#xff1a;

禁止WPS强制打开PDF文件

原文网址&#xff1a;禁止WPS强制打开PDF文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何避免WPS强制打开PDF文件。 方法 1.删除注册表里.pdf的WPS绑定 WinR&#xff0c;输入&#xff1a;regedit&#xff0c;回车。找到&#xff1a;HKEY_CLASSES_ROOT\.pdf删除KWPS.PDF…

后端Java Stream数据流的使用=>代替for循环

API讲解 对比 示例代码对比 for循环遍历 package cn.ryanfan.platformback.service.impl;import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; im…