mysql相关知识

查询一条sql语句的流程

  1. 连接器:建立连接,管理连接、校验用户身份
  2. 查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行(MSQL8.0 已删除)
  3. 解析 SQL:通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型(关键字和非关键字)
  4. 执行 SQL:执行 SQL 共有三个阶段:
    • 预处理阶段:检查表或字段是否存在;将select中的符号扩展为表上的所有列
    • 优化阶段:基于查询成本的考虑,选择查询成本最小的执行计划
    • 执行阶段:根据执行计划执行 SQL查询语句,从存储引擎读取记录,返回给客户端

在这里插入图片描述
索引下推能够减少二级索引在査询时的回表操作,提高査询的效率,因为它将 Server 层部分负责的事情,交给存储引擎层去处理了。
示例:联合索引age和reward

select * from t user where age >20 and reward = 100000;

在这里插入图片描述

索引的分类

在这里插入图片描述

B+和 B树的性能区别。

1、单点查询

8 树进行单个索引査询时,最快可以在 0(1)的时间代价内就查到,而从平均时间代价来看,会比 B+ 树稍快一些。

但是 8树的查询波动会比较大,因为每个节点即存索引又存记录,所以有时候访问到了非叶子节点就可以找到索引,而有时需要访问到叶子节点才能找到索引。

B+树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B树更「矮胖」,查询底层节点的磁盘 //O次数会更少

2、插入和删除效率

B+ 树有大量的冗余节点,这样使得删除一个节点的时候,可以直接从叶子节点中删除,甚至可以不动非叶子节点,这样删除非常快,

B+ 树的插入也是一样,有冗余节点,插入可能存在节点的分裂(如果节点饱和),但是最多只涉及树的条路径。而且 B+树会自动平衡,不需要像更多复杂的算法,类似红黑树的旋转操作等。
因此,B+树的插入和删除效率更高。

3、范围查询

B 树和 B+ 树等值査询原理基本一致,先从根节点查找,然后对比目标数据的范围,
最后递归的进入子节点查找。

因为 B+ 树所有叶子节点间还有一个链表进行连接,这种设计对范围查找非常有帮助,比如说我们想知道12月1日和 12 月 12 日之间的订单,这个时候可以先查找到 12月1日所在的叶子节点,然后利用链表向右遍历,直到找到 12月12日的节点,这样就不需要从根节点查询了,进一步节省查询需要的时间。

而B树没有将所有叶子节点用链表串联起来的结构,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 /O 操作,范围查询效率不如 B+ 树,

因此,存在大量范围检索的场景,适合使用 B+树,比如数据库。而对于大量的单个索引查询的场景,可以考虑 B树,比如 nosql 的 MongoDB。

索引失效

  • 当我们使用左或者左右模糊匹配的时候,也就是1ike%xx或者 1ike%xx% 这两种方式都会造成索引失效;
  • 当我们在查询条件中对索引列使用函数,就会导致索引失效。
  • 当我们在查询条件中对索引列进行表达式计算,也是无法走索引的。
  • MySQL在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而条件语句中的输入参数是数字的话,那么索引列会发生隐式类型转换,由于隐式类型转换是通过CAST 函数实现的,等同于对索引列使用了函数,所以就会导致索引失效。
  • 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。
  • 在 WHERE 子句中,如果在OR 前的条件列是索引列,而在 OR后的条件列不是索引列,那么索引会失效。

隔离级别

  1. 读未提交 (READ UNCOMMITTED):允许读取未提交的数据,可能导致脏读。
  2. 读已提交 (READ COMMITTED):只读取已提交的数据,避免脏读,但可能导致不可重复读。
  3. 可重复读 (REPEATABLE READ):保证在同一事务中多次读取同一数据结果一致,避免不可重复读,但可能发生幻读。
  4. 串行化 (SERIALIZABLE):最高的隔离级别,强制事务串行执行,避免幻读,加锁出现冲突时事务必须要等到前⼀个事务执⾏完成,隔离级别越⾼,性能就会下降。

MVCC(Multi-Version Concurrency Control,多版本并发控制)

是数据库管理系统中的一种用于解决并发事务控制问题的机制。它通过维护数据的多个版本来提高并发性能,同时避免了传统锁机制带来的性能瓶颈。

MVCC 主要解决了以下问题:

  1. 读写冲突问题
    传统的锁机制在处理并发读写时,通常会导致阻塞。例如,一个事务正在读取某条数据时,如果另一事务需要更新该数据,读事务可能会被阻塞。MVCC 通过保留数据的多个版本,可以让读操作读取旧版本的数据,而不会被写操作阻塞。

解决:在 MVCC 中,读操作不会阻塞写操作,写操作也不会阻塞读操作,从而提高了读写并发的性能。

  1. 幻读(Phantom Read)和不可重复读问题
    在并发环境下,一个事务在两次查询之间可能会看到其他事务插入或删除的数据,这会导致“幻读”问题。同样,如果事务第一次读取某条数据,之后该数据被另一个事务修改了,那么第二次读取时看到的数据会不同,这就是“不可重复读”。

解决:MVCC 通过每个事务使用一个时间戳来确保事务在执行期间始终读取相同的版本,避免了幻读和不可重复读问题。

  1. 提高读性能
    锁机制在处理并发读写时,往往会降低性能,因为需要获取和释放锁。而 MVCC 允许多个事务同时读取不同版本的数据,而不需要锁住数据。

解决:在 MVCC 中,读操作不需要获取锁,极大提高了读操作的性能。

MVCC 的工作原理(版本链+readview)

● 每条数据的每个版本都有一个对应的时间戳或事务ID。
● 每个事务都有一个开始时间戳,用于确定它可以看到哪些数据版本。
● 读操作读取事务开始时已经存在的版本,不受其他事务写入数据的影响。
● 写操作会生成一个新的数据版本,并将其标记为该事务的写入结果。

版本隐藏列

在这里插入图片描述

总结:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL进阶技巧:如何利用if语句简化where或join中的条件 | if条件语句的优雅使用方法

目录 0 问题场景 1 数据准备 2 问题分析 2.1 需求一 2.2需求二 3 小结 想要进一步了解SQL这门艺术语言的,可以订阅我的专栏数字化建设通关指南,将在该专栏进行详细解析。 专栏 原价99,现在活动价39.9,按照阶梯式增长&…

【LeetCode:1014. 最佳观光组合 + 思维题】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

解决启动docker desktop报The network name cannot be found的问题

现象 deploying WSL2 distributions ensuring main distro is deployed: checking if main distro is up to date: checking main distro bootstrap version: getting main distro bootstrap version: open \wsl$\docker-desktop\etc\wsl_bootstrap_version: The network name…

AP配置(leaderAP组网模式)

1.前言 由于业务需求,临时组建一个网络环境使用 网络设备:华为 AirEngine 5762-10、5762S-12 2.网络结构 参考文档,使用leader ap组网模式 使用一台5862S-12作为leaderAP,AP通电后默认是fit模式,需要进入修改 如果…

【html】基础(一)

本专栏内容为:前端专栏 记录学习前端,分为若干个子专栏,html js css vue等 💓博主csdn个人主页:小小unicorn ⏩专栏分类:js专栏 🚚代码仓库:小小unicorn的代码仓库🚚 &am…

保障电气安全的电气火灾监控系统主要组成有哪些?

电气火灾是什么? 电气火灾一般是指由于电气线路、用电设备、器具以及供配电设备出现故障性释放的热能:如高温、电弧、电火花以及非故障性释放的能量;如电热器具的炽热表面,在具备燃烧条件下引燃本体或其他可燃物而造成的火灾&…

vue项目中——如何用echarts实现动态水球图

有时候UI的脑洞真的很大,总是设计出一些稀奇古怪的图形,但又不得不佩服他们的审美,确实还挺好看的。今天给大家介绍echarts如何实现动态水球图。如图所示: 实现步骤 一、引入 在vue页面中引入echarts,如未安装需要先…

【计算机网络强化】计网强化笔记

第一章 计算机网络体系结构 1.1 计算机网络概述 1.计算机网络由若干个节点和连接这些节点的链路组成 2. 3.计算机网络的组成 ①硬件、软件、协议 ②边缘部分和核心部分 ③通信子网和资源子网 4.电路交换、报文交换和分组交换 ①电路交换 分为三步:建立连接、…

AI赋能千人千面营销:从数据采集到精准用户画像的全流程解析

随着数字化时代的来临,企业的营销策略正从“广撒网”的大众营销,向“千人千面”的个性化营销转变。借助AI(人工智能)技术,企业可以通过分析大量用户数据,深入洞察每一个用户的独特需求和行为,进…

机器翻译之多头注意力(MultiAttentionn)在Seq2Seq的应用

目录 1.多头注意力(MultiAttentionn)的理念图 2.代码实现 2.1创建多头注意力函数 2.2验证上述封装的代码 2.3 创建 添加了Bahdanau的decoder 2.4训练 2.5预测 3.知识点个人理解 1.多头注意力(MultiAttentionn)的理念图…

OpenCV_距离变换的图像分割和Watershed算法详解

在学习watershed算法的时候,书写代码总会出现一些错误: 上述代码运行报错,显示OpenCV(4.10.0) Error: Assertion failed (src.type() CV_8UC3 && dst.type() CV_32SC1) in cv::watershed 查找资料:目前已解决 这个错…

在Windows系统上安装的 Arrow C++ 库

在Windows系统上安装的 Arrow C 库 正文第一步第二步第三步第四步注: 检查是否安装成功 吐槽 正文 第一步 git clone gitgithub.com:apache/arrow.git第二步 打开powershell (好像cmd也可以,不过我试了powershell中不报错,cmd中报错,不是很清楚为什么) 打开arrow的目录 cd …

java项目之基于springboot框架开发的景区民宿预约系统的设计与实现(源码+文档)

项目简介 基于springboot框架开发的景区民宿预约系统的设计与实现的主要使用者分为: 管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,根据公告信息进行新增、修改、查询操作等等。。 &#x1…

EasyExcel将数据库里面的数据生成excel文件

EasyExcel官方文档 1.在model模块导入依赖 <!-- 生成报表--> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version> </dependency> 2.修饰实体类 package…

【网络】TCP协议的简单使用

目录 echo_service server 单进程单线程 多进程 多线程 线程池 client echo_service_code echo_service 还是跟之前UDP一样&#xff0c;我们先通过实际的代码来实现一些小功能&#xff0c;简单的来使用TCP协议进行简单的通信&#xff0c;话不多说&#xff0c;我们先实现…

【结构型】树形结构的应用王者,组合模式

目录 一、组合模式1、组合模式是什么&#xff1f;2、组合模式的主要参与者&#xff1a; 二、优化案例&#xff1a;文件系统1、不使用组合模式2、通过组合模式优化上面代码优化点&#xff1a; 三、使用组合模式有哪些优势1、统一接口&#xff0c;简化客户端代码2、递归结构处理方…

UART配置流程

S3C2440A 的通用异步收发器&#xff08;UART&#xff09;配有3 个独立异步串行I/O&#xff08;SIO&#xff09;端口&#xff0c;每个都可以是基于中断或基于DMA 模式的操作。换句话说&#xff0c;UART 可以通过产生中断或DMA 请求来进行CPU 和UART 之间的数据传输。UART 通过使…

CUDA并行架构

一、CUDA简介 CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构&#xff0c;该架构使GPU(Graphics Processing Unit)能够对复杂的计算问题做性能速度优化。 二、串并行模式 高性能计算的关键是利用多核处理器进行并行计算。 串行模式&#…

DesignMode__unity__抽象工厂模式在unity中的应用、用单例模式进行资源加载

目录 抽象工厂模式 思维导图 接口&#xff08;抽象类&#xff09; 工厂接口 抽象产品类 抽象武器接口 抽象人物接口 具体工厂和具体产品 具体工厂 &#xff08;1&#xff09;产品接口&#xff0c;生成具体人物 &#xff08;2&#xff09;武器接口&#xff0c;生成具体…

vue3 vxe-grid 通过数据库返回的列信息,生成columns,并且其中有一列是img类型,进行slots的格式化处理。

1、一般我们写死的列信息的时候&#xff0c;会这样定义&#xff1a; 2、然后我们在template里面&#xff0c;这样这样写slots格式化部分&#xff1a; 这样表格中就会展示出一张图片&#xff0c;并且&#xff0c;我们点击了可以查看大图。 3、那么我们从数据库中返回的列&#…