MySQL八股(自用)
MySQL
定位慢查询
1.聚合查询
2.多表查询
3.表数据量过大查询
4.深度分页查询
MySQL自带慢日志
开启慢查询日志,配置文件(/etc/my.cnf)
开启慢日志,设置慢日志的时间
用EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息
key 当前sql实际命中的索引
key_len索引占用的大小
extra 出现condition需要回表查询(添加索引或者修改返回字段)
MySQL支持的存储引擎
innoDB支持事务安全,支持表锁,行锁(另外两种不支持),支持外键
innoDB 兼顾高可用和高性能的通用存储引擎,MySQL默认的存储引擎
DML操作遵循ACID模型,支持事务
行级锁
支持外键
索引(有序的数据结构)
B+树
相比B树,实现外存储索引结构
优势:磁盘读写代价低,查询效率稳定,
便于扫库和区间查询(叶子结点组成一个有序的双向查询链表)
聚簇索引 将数据存储与索引放到一起,叶子节点保存了行数据 必须有,唯一
二级索引 将数据与索引分开存储,叶子节点关联对应的主键 可以有多个
如果存在主键,主键索引就是聚簇索引
不存在主键,唯一索引为聚簇索引
都不符合,innoDB自动生成一个rowid作为隐藏的聚簇索引
覆盖索引
索引中能找到所有需要返回的值
聚簇索引都是覆盖索引
非覆盖索引需要回表查询
MySQL超大分页可以使用覆盖索引
数据量大,limit分页查询,越靠后,分页查询效率越低
分页查询优化:创建覆盖索引+子查询
先通过子查询找到这个范围里的所有id
再通过id查询聚簇索引(覆盖索引)
创建索引原则
1.查询频繁的表
2.常作为查询条件、排序、分组操作的字段建立索引
3.区分度高的列作为索引,尽量建立唯一索引
4.针对字段特点建立索引,比如建立前缀索引
5.使用联合索引,减少单列索引,避免回表
6.控制索引的数量,维护代价大,影响增改查效率
7.不能存储null值的索引列会被优化器优先用于查询
索引失效
1.违反最左前缀法则
索引多列从索引的最左列开始,不跳过中间列
2.范围查询的右边的列不能使用索引
3.不要在索引上进行运算操作,索引失效 subString
4.字符串不加单引号,索引失效(查询优化器进行类型转换)
5.%开头的Like头部模糊匹配失效,尾部模糊匹配不失效
sql的优化方案
表的设计优化:设置合适数值,设置合适字符串类型
sql语句优化
避免SELECT * 务必指明字段
避免索引失效的写法
尽量用union all代替union union会多一次过滤
避免where子句对字段进行表达式操作
能用内连接(inner join)不用外连接(left right join)
使用时一定以小表作为驱动
内连接会对两个表进行优化,优先把小表放到外面,大表放到里面
left right join不会重新调整顺序
主从复制、读写分离
读操作比较多
数据库的写入影响读的效率
事务的特性 ACID
事务:一组操作的集合,不可分割的工作单位,同时成功或同时失败
A原子性:不可分割的最小操作单元,全部成功或全部失败
C一致性:事务完成,所有数据保持一致性
I隔离性:不受外部并发操作影响
D持久性:事务一旦提交或者回滚,对数据的改变就是永久的
并发事务问题:脏读,不可重复读,幻读
隔离级别:读未提交,读已提交,可重复读,串行化
脏读:一个事务读到另一个事务没提交的数据
不可重复读:一个事务对同一记录的读取结果不同(修改)
幻读:查询数据时,没有对应的数据行,插入数据时,这行数据又出现了(插入)
缓冲池:内存中,缓存磁盘上经常操作的真实数据
执行增删查改操作先操作缓冲池里的数据(没数据从磁盘加载)
以一定频率刷新磁盘,减少磁盘io
数据页:innoDB存储引擎磁盘管理的最小单元
每个页的大小默认16kb,页中缓存的是行数据
redo log(事务的持久性)
重做日志,记录事务提交时的数据页的物理修改,实现事务的持久化
该日志文件由两部分组成:
重做日志缓冲:内存中
重做日志文件:磁盘中
事务提交后所有修改信息都存在日志文件中,
用于刷新脏页到磁盘,磁盘错误时,进行数据恢复
redo log 记录物理日志
undo log 是逻辑日志
undo log(事务的原子性和一致性)
回滚日志,记录数据修改前的信息
提供回滚,MVCC多版本并发控制
delete一条记录,undo log记录一条对应的insert记录
update一条记录,记录一条相反的update记录
执行rollback可以根据undo log中的逻辑记录回滚
undo log可以实现事务的一致性和原子性
事务隔离性
排他锁
mvcc:多版本并发控制(允许多个事务访问数据库)
维护一个数据的多个版本,读写操作没有冲突
依赖于数据库中记录的隐式字段、undo.log日志、readView
隐藏字段:
最近修改事务id,记录插入这条记录,或最后一次修改的事务id
回滚指针:指向这条记录的上一个版本,用于配合undo.log
隐藏主键:表结构没有指定主键,会自动生成该字段
undo log
回滚日志:insert,update,delete
insert对现有记录没有影响
update,delete对现有记录有影响
insert产生的undo log日志只在回滚的时候需要,事务提交之后可以被立即删除
update,delete 产生的undo log日志不止回滚时需要
mvcc版本访问时也需要,因为有的线程会访问旧版本,不会立即删除
undo log版本链
不同事务或相同事务对同一条记录进行修改,
导致该记录的undolog生成一条记录版本链表
链表头部是最新的旧记录,尾部是最早的旧记录
readview
读视图 快照读
记录维护当前活跃的未提交的事务的id
当前读
读取的是记录的最新版本,对读取的记录加锁
保证其他事务不能修改当前事务 共享锁/排他锁
快照读
简单的select不加锁就是快照读
读取的是记录数据的可见版本,也可能是历史版本,不加锁,非阻塞读
每次select,都生成一个快照读
开启事务后的第一个select语句是快照读的地方
四个核心字段
当前活跃事务id集合
最小活跃事务id
预分配事务id,就是最大事务id+1(事务id是自增的)
ReadView创建者的事务id
不同隔离级别,生成ReadView的时机不同
在事务中每一次执行快照读时生成ReadView(RC模式)
仅在事务第一次执行快照读时生成ReadView,后续复用该ReadView(RR模式)
主从同步
核心:二进制日志
BINLOG记录了所有DDL(数据定义语言)和DML(数据操纵语言)
不包括SELECT,SHOW语句
master主库:事务提交后,把数据变更记录在二进制日志文件中
从库读取主库的二进制日志文件,写入从库的中继日志
slave重现中继日志中的操作
分库分表
单表数据量达到1000w或20G
优化解决不了性能问题(主从,索引)
io瓶颈(磁盘,网络),cpu瓶颈(聚合查询,连接太多)
垂直拆分
垂直分库:将不同的业务拆分到不同的库中
高并发,提高磁盘io和数据量连接数
垂直分表:字段为依据,将不同字段拆分到不同表
不常用字段放到一张表
将大字段拆分成附表
冷热数据分离
减少io过滤争抢,两表互不影响
水平拆分
水平分库:将一个库数据拆分到多个库中
路由规则:根据id节点取模、范围路由
解决单库大数据量,高并发的性能瓶颈
水平分表:将一个表的数据拆分到多个表中
优化单一表数据量大
避免io争抢导致锁表几率
中间件:sharding-sphere
mycat
相关文章:
MySQL八股(自用)
MySQL 定位慢查询 1.聚合查询 2.多表查询 3.表数据量过大查询 4.深度分页查询 MySQL自带慢日志 开启慢查询日志,配置文件(/etc/my.cnf) 开启慢日志,设置慢日志的时间 用EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信…...
2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码
引言 近年来,在合理框架内求解优化问题的元启发式算法的发展引起了全球科学界的极大关注。本期介绍一种新的元启发式算法——不实野燕麦优化算法Animated Oat Optimization algorithm,AOO。该算法模拟了不实野燕麦的3种独特行为,于2025年6月…...
如何开发一款 Chrome 浏览器插件
Chrome是由谷歌开发的网页浏览器,基于开源软件(包括WebKit和Mozilla)开发,任何人都可以根据自己需要使用、修改或增强它的功能。Chrome凭借着其优秀的性能、出色的兼容性以及丰富的扩展程序,赢得了广大用户的信任。市场…...
UniApp 微信小程序绑定动态样式 :style 避坑指南
在使用 UniApp 开发跨端应用时,绑定动态样式 :style 是非常常见的操作。然而,很多开发者在编译为 微信小程序 时会遇到一个奇怪的问题: 原本在 H5 中可以正常渲染的样式,在微信小程序中却不生效! 让我们通过一个示例来…...
基于OpenCV中的图像拼接方法详解
文章目录 引言一、图像拼接的基本流程二、代码实现详解1. 准备工作2. 特征检测与描述detectAndDescribe 函数详解(1)函数功能(2)代码解析(3)为什么需要这个函数?(4)输出数…...
【BUG】滴答定时器的时间片轮询与延时冲突
SysTick定时器实现延时与时间戳的深度分析与问题解决指南 1. SysTick基础原理 1.1 SysTick的功能与核心配置 SysTick是ARM Cortex-M内核的系统定时器,常用于以下场景: 时间戳:通过周期性中断记录系统运行时间(如tick_ms计数器&…...
基于EFISH-SCB-RK3576/SAIL-RK3576的智能快递分拣机技术方案
(国产化替代J1900的物流自动化解决方案) 一、硬件架构设计 高速视觉识别系统 多目立体成像: 双MIPI-CSI接入16K线阵相机(扫描速度5m/s),支持0.1mm级条形码破损识别NPU加速YOLOv7算法࿰…...
The 2022 ICPC Asia Xian Regional Contest(E,L)题解
E Find Maximum 题意: 首先,通过观察与打表,可以发现: 规律: 对于非负整数 x,函数 f(x) 的值等于: 将 xx 写成三进制后,各个位数的数字之和 该三进制数的位数。 例如,…...
Jmeter 安装包与界面汉化
Jmeter 安装包: 通过网盘分享的文件:CSDN-apache-jmeter-5.5 链接: https://pan.baidu.com/s/17gK98NxS19oKmkdRhGepBA?pwd1234 提取码: 1234 Jmeter界面汉化:...
《Python星球日记》 第70天:Seq2Seq 与Transformer Decoder
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、Seq2Seq模型基础1. 什么是Seq2Seq模型?2. Encoder-Decoder架构详解1️⃣编码器(Encoder)2️⃣解码器(Decoder)3. 传统Seq2Seq模型的局限性…...
【Linux】基础指令(Ⅱ)
目录 1. mv指令 2. cat指令 3.echo指令 补:输出重定向 4. more指令 5. less指令 6. head指令和tail指令 7.date指令 时间戳: 8. cal指令 9. alias指令 10.grep指令 1. mv指令 语法:mv [选项]... 源文件/目录 目标文件/目录 …...
【Python3教程】Python3基础篇之输入与输出
博主介绍:✌全网粉丝23W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...
mysql的一个缺点
最近再移植一个从oracle转mysql的项目,喜提一个报错: You cant specify target table A016 for update in FROM clause 对应的程序代码: public void setCurrent(String setId, String pk, String userId) throws SysException {String[]…...
【C/C++】高阶用法_笔记
1. 模板元编程(TMP)与编译时计算 (1) 类型萃取与 SFINAE 类型萃取(Type Traits):利用模板特化在编译时推断类型属性。 template<typename T> struct is_pointer { static constexpr bool value false; };templ…...
AMS3xxi激光测距仪安装调试维护详解
一、应用原理介绍 如下图,AMS3xxi激光测距发出的激光通过特定反光板返回后,利用“时间飞行法”原理进行距离 测量。测量中若遮挡光束传播会导致测距失败,产品报警。 二、固定和调节位置说明 在安装板上,使用 4 个 M5 螺钉锁 AMS…...
建筑IT数字化突围:建筑设计企业的生存法则重塑
困局:铅笔与键盘的撕裂之痛 晨光中的设计院里,总工老张的办公桌上堆叠着三摞图纸:左边是刚收尾的住宅施工图,中间夹着结构专业提资的变更单,右边是甲方连夜发来的方案调整意见。这是他从业28年来的日常,也…...
VTK|类似CloudCompare的比例尺实现2-vtk实现
文章目录 实现类头文件实现类源文件调用逻辑关键问题缩放限制问题投影模式项目git链接实现类头文件 以下是对你提供的 ScaleBarController.h 头文件添加详细注释后的版本,帮助你更清晰地理解每个成员和方法的用途,尤其是在 VTK 中的作用: #ifndef SCALEBARCONTROLLER_H #de…...
Java高频面试之并发编程-17
volatile 和 synchronized 的区别 在 Java 并发编程中,volatile 和 synchronized 是两种常用的同步机制,但它们的适用场景和底层原理有显著差异。以下是两者的详细对比: 1. 核心功能对比 特性volatilesynchronized原子性不保证复合操作的原…...
最优化方法Python计算:有约束优化应用——近似线性可分问题支持向量机
二分问题的数据集 { ( x i , y i ) } \{(\boldsymbol{x}_i,y_i)\} {(xi,yi)}, i 1 , 2 , ⋯ , m i1,2,\cdots,m i1,2,⋯,m中,特征数据 { x i } \{\boldsymbol{x}_i\} {xi}未必能被一块超平面按其标签值 y i ∈ { − 1 , 1 } y_i\in\{-1,1\} yi∈…...
Excel中批量对多个结构相同的工作表执行操作,可以使用VBA宏来实现
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实…...
Spring的Validation,这是一套基于注解的权限校验框架
为了保证数据的正确性、完整性,作为一名后端开发工程师,不能仅仅依靠前端来校验数据,还需要对接口请求的参数进行后端的校验。 controller 全局异常处理器 在项目中添加一个全局异常处理器,处理校验异常 RestControllerAdvice p…...
鸿蒙OSUniApp 开发的下拉刷新与上拉加载列表#三方框架 #Uniapp
使用 UniApp 开发的下拉刷新与上拉加载列表 前言 最近在做一个小程序项目时,发现列表的加载体验对用户至关重要。简单的一次性加载全部数据不仅会导致首屏加载缓慢,还可能造成内存占用过大。而分页加载虽然解决了这个问题,但如果没有良好的…...
VastBase的日常操作记录
---------需要命令启动数据库操作------------------- [vastbasedmz-neo4j01 ~]$ vb_ctl start [2025-05-13 09:41:54.515][10224][][vb_ctl]: vb_ctl started,数据目录是 /home/vastbase/data/vastbase [2025-05-13 09:41:54.728][10224][][vb_ctl]: 等待服务端进程启动 ... …...
企业级IP代理解决方案:负载均衡与API接口集成实践
在全球化业务扩张与数据驱动决策的背景下,企业级IP代理解决方案通过负载均衡技术与API接口集成,可有效应对高频请求、反爬机制及合规风险。以下是基于企业级场景的核心实践要点: 一、负载均衡与IP代理的深度协同 动态IP池的负载均衡策略 轮询…...
智能手表项目风险评估与应对计划书
📘 智能手表项目风险评估与应对计划书 项目名称:Aurora Watch S1 版本号:v1.0 编制人:XXX(项目经理) 日期:2025年xx月xx日 一、概述 本计划书旨在识别Aurora Watch S1智能手表项目全过程中可能…...
Java基础之静态代理和动态代理
一、静态代理 定义: 代理类与被代理类在编译期就已确定,代理类需要手动编写并实现与被代理类相同的接口 1.核心角色: Subject(抽象主题):定义业务方法的接口 RealSubject(真实主题ÿ…...
观成科技:加密C2框架Vshell流量分析
一、工具介绍 Vshell是一款功能全面的红队工具,其设计兼顾隐蔽性与灵活性,尤其适合模拟网络攻击和测试防御体系。该工具支持TCP、UDP、KCP、WebSocket、DNS、DOH、DOT等多种协议。内置隧道代理功能,支持正向和反向连接模式,可以适…...
麒麟环境下Selenium的使用
本文主要介绍了在内网环境下、服务主机无域名的情况下,为了抓取内网其他系统网页数据,安装使用Selenium的方,并详细介绍了离线安装python依赖包的方法。服务主机操作系统为麒麟V10 SP3。 一. 查看可以安装的浏览器安装包 1. 更新软件包索引 首先确保软件包列表是最新的:…...
Protocol Buffers 全流程通俗讲解
Protocol Buffers 全流程通俗讲解(从 0 到进阶) 目录 序列化到底为什么要选 Protobuf?核心原理:一眼看懂二进制编码10 分钟跑通「写 .proto → 生成代码 → 读写数据」.proto 文件 8 条黄金法则(小白友好版&…...
从故障到防护:抗晃电保护装置如何提升电网可靠性?
安科瑞刘鸿鹏 摘要 随着工业自动化水平的提升,生产设备对供电连续性和稳定性的依赖程度越来越高,电网中的电压暂降(俗称“晃电”)问题对工业生产构成了严重威胁。特别是在化工、冶金、半导体等高敏感行业,晃电引发的…...
Three.js知识框架
一、Three.js 基础概念 1. Three.js 简介 是什么? 基于 WebGL 的 3D JavaScript 库,用于在浏览器中渲染 3D 场景。 核心优势 简化 WebGL 的复杂 API,提供高层封装。 跨平台(支持桌面和移动端)。 适用场景 3D 可视…...
5.14本日总结
一、英语 背诵list30,复习list1 二、数学 完成30讲第13讲课后题,学习14讲部分内容 三、408 完成计网5.1,5.2题目 四、总结 在高数14讲内容学完之前写完13讲的所有题目,预计20号学完14讲内容,408的进度要加快,本…...
数据结构学习之链表学习:单链表
在之前顺序表的学习过程中,我们知道顺序表中头插和中插的复杂度是O(N)。那我们可不可以将其降低为O(1)呢?可不可以不增容想用就用想扔就扔而不会浪费一点空间呢?那就是我们今天的内容࿱…...
技术债务积累,如何进行有效管理
识别和评估技术债务、明确技术债务的优先级、制定系统的还债计划、持续监控与预防技术债务产生是有效管理技术债务积累的重要策略。其中尤其要注重识别和评估技术债务,只有准确识别技术债务的种类和严重程度,才能制定出高效且有针对性的解决方案…...
[20250514] 脑机接口行业调研报告(2024年最新版)
脑机接口行业调研报告(2024年最新版) 1. 调研报告 2. 相关企业...
【HTTPS基础概念与原理】SSL/TLS协议演进史:从SSLv3到TLS 1.3
以下是 SSL/TLS协议演进史 的详细解析,从SSLv3到TLS 1.3,涵盖各版本的核心特点、重大漏洞及淘汰原因: 1. SSLv3(Secure Sockets Layer 3.0) • 发布时间:1996年(Netscape开发) • 核…...
JVM 与云原生的完美融合:引领技术潮流
最近佳作推荐: Java 大厂面试题 – 揭秘 JVM 底层原理:那些令人疯狂的技术真相(New) Java 大厂面试题 – JVM 性能优化终极指南:从入门到精通的技术盛宴(New) Java 大厂面试题 – JVM 深度剖析&…...
【进程控制二】进程替换和bash解释器
【进程控制二】进程替换 1.exec系列接口2.execl系列2.1execl接口2.2execlp接口2.3execle 3.execv系列3.1execv3.2总结 4.实现一个bash解释器4.1内建命令 通过fork创建的子进程,会继承父进程的代码和数据,因此本质上还是在执行父进程的代码 进程替换可以将…...
如何查看打开的 git bash 窗口是否是管理员权限打开
在 git bash 中输入: net session >nul 2>&1 && (echo Ok) || (echo Failed) 显示 OK 》是管理员权限; 显示 Failed 》不是管理员权限。 如何删除此步生成的垃圾文件: 新建一个 .txt 文件,输入以下代码…...
ubuntu 22.04 wifi网卡配置地址上网
通过network-manager配置 确定是否存在usb网卡的驱动 rootgpu-server:/etc/netplan# lsmod | grep rt2800usbrt2800usb 32768 0rt2x00usb 24576 1 rt2800usbrt2800lib 139264 1 rt2800usbrt2x00lib 73728 3 rt2800us…...
让 Cursor 教我写 MCP Client
文章目录 1. 写在最前面2. 动手实现一个 MCP Client2.1 How 天气查询 Client2.1.1 向 Cursor 提问的艺术2.1.2 最终成功展示2.1.3 client 的代码 3. MCP 协议核心之一总结3.1 SSE vs WebSocket 4. 碎碎念5. 参考资料 1. 写在最前面 学习了 MCP Server 的实现后,刚好…...
GoogleTest:GMock2 EXPECT_CALL
GoogleTest:GMock初识-CSDN博客 简单的介绍了GMock工作的方式 GMock其实是比较复杂的,先上一个例子,然后再仔细的解读: //not_ready_class.hpp #include <string>class Person { public:virtual ~Person() = default;virtual std::string name() = 0;virtual int a…...
自注意力机制(Self-Attention)前向传播手撕
题目 实现Transformer中自注意力机制的前向传播代码 思路与代码 自注意力机制(Self-Attention)是自然语言处理和深度学习中的一种核心机制,最早在 Transformer 模型中被提出。它的核心思想是:让序列中的每个元素都能动态关注整个…...
华硕服务器-品类介绍
目录 一、核心产品线解析 1. 机架式服务器 2. 塔式服务器 3. 高密度计算服务器 二、关键技术与模组配置 1. 主板与管理模块 2. 电源与散热 3. 存储与网络 三、应用场景与行业解决方案 1. 人工智能与高性能计算 2. 云计算与虚拟化 3. 边缘计算与工业物联网 一、核心…...
【Ansible基础】Ansible设计理念与无代理架构深度解析
目录 1 Ansible概述与核心设计理念 1.1 Ansible的核心设计哲学 1.2 Ansible与其他配置管理工具的对比 2 Ansible无代理架构详解 2.1 无代理架构工作原理 2.2 无代理架构的优势 2.3 无代理架构的局限性 3 Ansible核心组件与架构 3.1 Ansible核心组件架构 组件说明&…...
利用vba替换word中多个表格,相邻单元格的文字
目录 一、效果图1、替换前2、替换后 二、敲代码1、开发者工具→vba编辑器,点击插入模块2、键入以下代码3、代码编辑完成后,开发者工具→运行宏,选择对应名称,运行 一、效果图 标题估计没说明白,上图 1、替换前 2、替…...
动态多因子策略
策略其核心思想是通过多种技术指标的结合,动态调整交易信号,以实现更精准的市场进出和风险管理。 交易逻辑思路 1. 初始化与数据更新: - 在每个Bar的开盘时,更新当日的最高价、最低价和收盘价。 - 计算短期和长期的移动平均线&…...
STC32G12K128实战:串口通信
STC32G12K128芯片写一个按键通过串口1发送字符串的程序。首先,确认芯片的串口1配置。STC32G系列通常使用UART1,相关的寄存器是P_SW1来选择引脚。默认情况下,UART1的TX是P3.1。 接下来是设置定时器作为波特率发生器。通常用定时器2,…...
基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
一种资源有限单片机处理cJSON数据的方法
一般单片机处理cJSON格式的数据都直接使用cJSON库,但对于Ram较小的单片机,由于资源有限,这并不合适,但我们可以根据cJSON数据的特定格式,使用土方法,直接对字符进行查找裁剪即可 //截取字符串str中字符a与…...