mysql闲谈
如何定位慢查询
1、测试环境压测时,有的接口非常慢,响应时间超过2秒以上。当时系统部署了运维的监控系统Skywalking,在展示报表中可以看到是哪儿个接口慢,可以看到SQL具体执行时间。
2、如果没有类似的监控系统,在Mysql中也提供了慢日志查询功能,在mysql系统配置文件中开启慢日志的功能,设置超过多少时间记录到一个日志文件中,我记得配置的是2s,只要sql执行时间超过2s就会记录到日志文件中。
explain type
null(没有使用到表)、system(mysql内置表)、const(根据主键查询)、eq_ref(根据主键索引查询或唯一索引查询)、ref(索引查询)、range(走的索引but范围查询)、index(索引树扫描)、all(全盘扫描)
慢SQL如何分析
采用mysql自动执行计划explain来查看执行情况
通过key和key_len检查是否命中索引,如果本身已经添加了索引,可以判断索引是否失效
通过type关键字查看sql是否有进一步的优化空间,是否存在全索引或全盘扫描
通过extra建议判断,是否出现回表,如果出现可以尝试添加索引或修改返回字段
什么是索引
mysql高效访问数据的数据结构(有序)
提高检索数据的效率,降低数据库io成本(你需要全表扫描)
通过索引对数据进行排序,降低数据排序成本,降低CPU消耗
索引底层数据结构
Mysql的InnoDB引擎采用B+树的数据结构来存储索引
· 阶数更多,路径更短
· 磁盘读写代价B+树更低,非叶子节点只存储指针,叶子节点存储行数据
· B+便于扫库和区间查询,叶子节点是双向链表(B树非叶子和叶子都会存放数据)
什么是聚簇索引什么是非聚簇索引
聚簇索引(聚集索引):数据与索引放到一起,B+树叶子节点保存了整行数据,有且只有一个
非聚簇索引(二级索引):数据与索引分开存储,B+树叶子节点保存对应主键,可以有多个
回表查询
通过二级索引找到对应的主键值,到聚集索引中查找整行数据
覆盖索引
覆盖索引指的是查询使用了索引,返回的列,必须在索引中全部找到。
使用id查询,直接走聚簇索引,一次索引扫描,直接返回数据,性能高
如果返回的列没有创建索引,可能触发回表查询,尽量避免使用select*
Mysql超大分页怎么处理
问题:数据量较大,limit分页查询,需要对数据进行排序,效率低
解决方案:覆盖索引+子查询。先分页查询数据id字段,确定id之后使用子查询过滤,只查询这个id列表中的数据就可以了,查询id的时候,走的覆盖索引,提升效率。
select *
from tb_sku t, (select id from tb_sku order by id limit 900000000, 10) a
where t.id = a.id;
索引创建原则
*数据量较大,且频繁查询的表
*常作为查询条件、排序、分组的字段
字段内容区分度高
内容较长,使用前缀索引
*尽量联合索引
*要控制索引数量
如果索引列不能存储null值,请在创建表时使用not null约束
- 什么情况下索引会失效
- 违反最左前缀法则,索引失效
索引abc_index:(a,b,c),只会在where条件中带有(a)、(a,b)、(a,b,c)的三种类型的查询中使用。其实这里说的有一点歧义,其实当where条件只有(a,c)时也会走,但是只走a字段索引,不会走c字段。 - 范围查询右边的列,索引失效
- 字符串类型的数值不加单引号,索引失效(类型转换)
- 以%开头的like模糊查询,索引失效
- 不要在索引列上进行运算操作,索引失效
- 索引包含有 NULL 值的列,索引失效(索引不会包含有 NULL 值的列)
sql优化
表设计优化,数据类型选择
索引优化,索引创建原则
sql语句优化,避免索引失效,避免使用select *
主从复制、读写分离、不让数据的写入影响读操作
分库分表
答:sql优化的话,建表使用索引,sql语句的编写、主从复制、读写分离,数据量比较大的话,可以考虑分库分表。建表的时候参考阿里开发手册《嵩山版》,比如,定义字段需要结合字段含义选择合适类型,如果是数值的话,像tinyint、int、bigint 根据实际情况选择。如果是字符串,char和varchar(可变长度)或者text类型。使用索引的时候,满足创建索引原则。sql语句,select 必须指明字段,不直接使用select * ,注意sql语句,避免索引失效写法,如果是聚合查询,尽量用union all 代替 union(多一层过滤,效率低)表关联尽量使用innerjoin 不要使用 left right ,必须使用的话最好小表驱动大表。
事务
特性
原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
A向B转账500元,转账成功,A扣500,B加500,原子性操作体现在要么都成功,要么都失败。
转账过程,数据要一致,A扣除500,B必须增加500
在转账过程,隔离性体现在不能受其他事物干扰
事务提交以后,要把数据持久化(落盘)
并发事务带来的问题
脏读:一个事物读到领一个事务没有提交的数据
不可重复读:一个事物前后读取同一条记录,两次读取数据不同
幻读:一个事物按照条件查询数据,没有对应数据行,在插入数据时,又发现这行数据存在。
解决问题:隔离级别 默认可重复读
(RU)未提交读 啥也没解决
(RC)读已提交 脏读
(RR)可重复读 脏读、不可重复读
(SB)串行化 脏读、不可重复读、幻读
undo log和redo log的区别
undo log:逻辑日志,记录与实际操作语句相反的操作。事务回滚时,通过你操作恢复原来的数据
redo log:记录数据页的物理变化,服务宕机可以用来同步数据
redo log 保证事务的持久性 ,undo log保证事务的 原子性 和 一致性
事务中的隔离性是如何保证的
锁:排他锁,一个事务获取了一个数据行的排他锁,其他事物就不能在获取改行的其他锁
mvcc:多版本并发控制
MVCC
多版本并发控制:一个数据的多个版本,使得读写操作没有冲突。
底层实现分为三个部分:隐藏字段、undo log、readView
隐藏字段:DB_TRX_ID(记录每一次操作的事务id,自增)、DB_ROLL_PTR(回滚指针,指向上一个版本的事务版本记录地址)、DB_ROW_ID(隐藏主键)
undo log:
回滚日志—存储老版本数据
版本链—多个事务并行操作某一行记录,记录不同事物修改数据的版本,通过roll_pointer指针形成一个链表
readView:解决事务查询选择版本的问题,在内部定义了一些匹配规则和当前一些事务id判断该访问哪儿个版本的数据,不让的隔离级别快照读是不一样的,最终的访问的结果不一样。如果是RC隔离级别,每次之快照读生成readView,如果是RR隔离级别,仅在事务中第一次执行快照读时生成readView,后续复用。
主从同步原理
核心是二进制文件binlog(DDL数据定义语句和DML(增删改)语句)
1、Master主库在事务提交时,会把数据变更记录在二进制文件Binlog中
2、从库读取主库Binlog,吸入到从库的中继日志Relay log
3、从库重做中继日志中的事件,将改变反映它自己的数据
分库分表
水平分库:将一个库的数据拆分到多个库中,解决海量数据存储和高并发问题
水平分表:解决单表存储和性能问题
垂直分库:根据业务进行拆分,高并发下提高磁盘IO和网络连接数
垂直分表:冷热数据分离,多表互不影响
相关文章:
mysql闲谈
如何定位慢查询 1、测试环境压测时,有的接口非常慢,响应时间超过2秒以上。当时系统部署了运维的监控系统Skywalking,在展示报表中可以看到是哪儿个接口慢,可以看到SQL具体执行时间。 2、如果没有类似的监控系统,在Mysq…...
物联网学习1、什么是 MQTT?
MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通…...
【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析
一、引言 在机器学习项目中,数据探索是至关重要的一步。它不仅是模型构建的基础,还是确保模型性能稳定、预测准确的关键。数据探索的过程中,数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息ÿ…...
软件测试(一)--简介+主流技能+分类+模型+流程
一、软件及测试简介 1、软件生产过程 需求产生–需求文档–设计效果图–产品开发–产品测试(测试产品与需求文档是否一致)–部署上线 2、什么是软件测试 使用技术手段验证软件是否满足使用需求。 技术包括:(使用网络技术测试安…...
技术引领,策略升级:腾讯云与你共探数字金融新篇章
引言 2024 年 3 月 27 日下午,在北京腾讯总部,一场关于大模型与数据要素时代数字金融发展的深入讨论火热进行中。【TVP 走进腾讯:大模型与数据要素时代的数字金融发展论坛】是在腾讯二十年发展历程和数字化实践的基础上,进一步探索…...
数据库-root密码丢失的重置方案(win11环境)
当在windows系统中安装的mysql由于操作不当,或者密码遗忘,今天测试了一下,可以用以下方法重置root的密码。 mysqlwindows环境root密码重置问题 在win10/11环境下mysql8密码遗忘后的重置密码方案。 停止mysql服务 查找windows中的mysql服务名称…...
免试生常问的一些问题汇总---专升本学习篇
1.你怎么理解你申请的专业? 答:软件工程室一门涉及软件开发、维护和管理的工程学科。它结合了计算机科学、工程学和管理科学的原理,皆在通过系统化、规范化的方法来开发高质量的软件系统。 1.技术和支持 :软件工程包括编程语言、算法、数据结构、软件设计模式、软件测试、…...
FPGA的就业前景
FPGA(Field-Programmable Gate Array)技术在数字电路设计和嵌入式系统开发方面具有广泛的应用,因此在FPGA领域有着较好的就业前景。 目前,FPGA在通信、计算机、消费电子、汽车、航空航天等行业中得到了广泛应用。随着新一代通信网…...
7.阻塞模式与非阻塞模式
1.阻塞模式 一个线程来处理多个连接显得力不从心 accept等待连接 是一个阻塞方法 read读取SocketChannel中的数据 是一个阻塞方法 /*** 服务端* param args* throws IOException*/public static void main(String[] args) throws IOException {//建立一个缓冲区ByteBuffer b…...
Unity类银河恶魔城学习记录11-10 p112 Items drop源代码
Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemObject_Trigger.cs using System.Collections; using System.Collecti…...
EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格
xls文件: 后端代码: InputStream filePath this.getClass().getClassLoader().getResourceAsStream(templateFile);// 根据模板文件生成目标文件ExcelWriter excelWriter EasyExcel.write(orgInfo.getFilename()).excelType(ExcelTypeEnum.XLS).withTe…...
炫我科技:云渲染领域的佼佼者
随着数字化时代的来临,云渲染技术正逐渐成为影视、游戏、动画等创意产业的重要支柱。在这一领域中,炫我科技凭借其卓越的技术实力、优质的服务以及不断创新的精神,已然成为了云渲染行业的佼佼者。 炫我科技自成立之初,便以打造高…...
VsCode正确解决vue3+Eslint+prettier+Vetur的配置冲突
手把手教你VsCode正确解决vue3EslintprettierVetur的配置冲突 VsCode正确解决vue3EslintprettierVetur的配置冲突Eslint文档查看和修改规则:step1:首先快速浏览下规则简要setp2: ctrlF 搜索你要配置规则的英文名,例如attributesetp3: 修改配置…...
计算机网络—VLAN 间路由配置
目录 1.拓扑图 2.实验环境准备 3.为 R3 配置 IP 地址 4.创建 VLAN 5.配置 R2 上的子接口实现 VLAN 间路由 6.配置文件 1.拓扑图 2.实验环境准备 配置R1、R3和S1的设备名称,并按照拓扑图配置R1的G0/0/1接口的IP地址。 [Huawei]sysname R1 [R1]interface Giga…...
微服务篇-C 深入理解第一代微服务(SpringCloud)_VII 深入理解Swagger接口文档可视化管理工具
原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载 Part 1 理论部分 1 传统API接口文档存在的问题? 1 对API接口文档进行更新的时候,需要及时将变化通知前端开发人员&…...
区块链的应用领域:重塑未来的信任机制
区块链作为一种新兴的技术,正在逐渐改变我们的生活。它以其独特的优势,正在开启一个信任的新时代。在金融、供应链管理、医疗健康、教育、文化娱乐、房地产等众多领域,区块链已经崭露头角,以其独特的方式发挥着作用。 1.金融领域…...
怎么在循环List的时候删除List的元素
怎么在循环List的时候删除List的元素 1. 先给出结论 任何时候都不要在 for 循环中删除 List 集合元素 2. 为什么在 for 循环中删除 List 集合元素是错误的 在 for 循环中删除 List 集合元素的问题主要是因为循环的迭代器和 List 集合的元素索引之间的冲突。在使用 for 循环遍历…...
SpringBoot+thymeleaf完成视频记忆播放功能
一、背景 1)客户要做一个视频播放功能,要求是系统能够记录观看人员在看视频时能够记录看到了哪个位置,在下次观看视频的时候能够从该位置进行播放。 2)同时,也要能够记录是谁看了视频,看了百分之多少。 说明:由于时间关系和篇幅原因,我们这里只先讨论第一个要求,第…...
ES 7.12官网阅读-ILM(index lifecycle management)
官网文档:ILM: Manage the index lifecycle | Elasticsearch Guide [7.12] | Elastic ILM:管理 index 的生命周期 可以根据你的性能、弹性、保存时长需求,使用ILM策略来自动管理你的index;比如 1. 当一个index达到确定的大小&a…...
Jenkins执行策略(图文讲解)
Jenkins执行策略-图文讲解 一:手动执行1、手动执行流程2、手动执行操作 二、通过构建触发器——定时执行1、定时执行流程2、定时执行操作 三、当开发部署成功之后进行执行——在测试项配置——关注的项目1、执行流程2、操作流程 四、测试代码有更新的时候自动构建1、…...
STC单片机蓝牙无线下载避坑指南:为什么你的STC15/STC8总是烧录失败?
STC单片机蓝牙无线下载避坑指南:为什么你的STC15/STC8总是烧录失败? 去年冬天的一个深夜,当我第37次点击STC-ISP软件的"下载"按钮,电脑屏幕依然冷冰冰地显示"正在检测目标单片机..."时,工作台上的…...
Qwen3-TTS-Tokenizer-12Hz音频编解码器:5分钟快速部署与一键使用教程
Qwen3-TTS-Tokenizer-12Hz音频编解码器:5分钟快速部署与一键使用教程 1. 为什么选择Qwen3-TTS-Tokenizer-12Hz 如果你正在寻找一个高效、高质量的音频编解码解决方案,Qwen3-TTS-Tokenizer-12Hz绝对值得考虑。这个由阿里巴巴Qwen团队开发的工具…...
C# Winform项目实战:给你的桌面应用加个‘点赞’悬浮按钮(MaterialFloatingActionButton全解析)
C# Winform项目实战:打造智能悬浮按钮的完整交互方案 在桌面应用开发中,那些看似微小的交互细节往往决定了用户体验的成败。想象一下,当用户完成一项重要操作后,一个精致的悬浮按钮轻轻弹出,邀请他们为内容点赞——这种…...
3分钟完成Windows和Office激活:KMS_VL_ALL_AIO智能激活工具终极指南
3分钟完成Windows和Office激活:KMS_VL_ALL_AIO智能激活工具终极指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文…...
别再死记硬背段码表了!用Proteus仿真+51单片机,动态显示数码管的底层原理与优化技巧
51单片机数码管动态显示:从视觉暂留原理到Proteus仿真优化实战 数码管作为嵌入式系统中最经典的人机交互元件之一,其显示效果直接影响用户体验。许多开发者虽然能实现基本功能,却在动态显示时遭遇亮度不均、闪烁严重、CPU占用过高等痛点问题。…...
SAE J1708/J1587协议详解:从协议栈到真实卡车诊断案例解析
SAE J1708/J1587协议深度解析:从数据帧到发动机诊断实战 重型商用车电子系统的神经脉络里,流淌着SAE J1708/J1587协议的数据血液。当一辆40吨的卡车在洲际公路上疾驰时,这套诞生于1980年代的通信标准仍在忠实地传递着发动机转速、燃油压力和故…...
STM32CubeMX配置LwIP内存参数,实测TCP速度提升5倍(附JPerf测速教程)
STM32CubeMX调优LwIP内存配置:实测TCP吞吐量提升500%的工程实践 当我们在STM32平台上开发网络应用时,LwIP协议栈的性能往往成为瓶颈。许多工程师发现,即使硬件支持百兆以太网,实际TCP传输速度却只能达到1-2Mbps。这背后隐藏着怎样…...
Dify插件调试效率提升300%:Chrome DevTools深度联动+本地热重载调试全链路揭秘
第一章:Dify插件开发入门与核心架构解析Dify 插件机制是其扩展能力的核心支柱,允许开发者以标准化方式接入外部服务、增强 LLM 应用的上下文感知与执行能力。插件基于 OpenAPI 3.0 规范定义接口契约,并通过 Dify 平台统一注册、鉴权与编排&am…...
别再手动敲AT指令了!用STM32CubeMX HAL库驱动ESP8266连接OneNET的保姆级教程
STM32CubeMX与HAL库驱动ESP8266连接OneNET的工程化实践 在物联网设备开发中,WiFi模块的集成往往是项目成败的关键节点。传统基于AT指令的手动调试方式不仅效率低下,还容易引入人为错误。本文将展示如何利用STM32CubeMX生成的HAL库代码,构建一…...
从空白文档到期刊初稿:PaperXie 的 4 步 AI 写作流,专治 “论文难产”
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/ai/journalArticleshttps://www.paperxie.cn/ai/journalArticles 引言:被期刊论文卡住的日子,终于翻篇了 你有没有过这种时刻?对着空白…...
