mysql调优实战

news2025/3/15 23:08:47

EXPLAIN执行分析

id:值越大越先执行相同时,由上向下执行。
possible_key: 可能走索引的键。 key:真正走索引的键
rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,也就是说,用的越少越好

system > const > eq_ref > ref > range > index > all
eq_ref 唯一性索引扫描, ref:非唯一性索引扫描
Index与All区别为index类型只遍历索引树
range:范围查询

trace工具

可以查看mysql优化器具体的执行计划以及成本估算

小表驱动大表

from后面跟着的通常为主表,通常选择数据量较小,索引比较完备的表

索引

较频繁查询条件的字段应该创建索引
不适合:

  • 字段唯一性太差不适合单独作索引
  • 更显非常频繁的字段不适合
  • 不会出现在where的字段
     

缺点:

  • 占用物理空间
  • 降低增删改的效率
     

通常建议选用联合索引:因为每增加一个索引就会增加写操作的开销和磁盘的开销

mysql自身的优化

索引覆盖

索引下堆

对于范围查询或者模糊查询,减少回表的次数

索引失效

关键看排序是否会失效
最左前缀法则


where condition = "age",此时不会走联合索引,因为走了也没意义,排序是先按照name进行排序

1.首先key一定要有值。不能是NULL
2.type应该是ref、eq_req, range、const
3.extra如果是NULL,useing index using index condition都是可以的

是否走索引是mysql的优化器通过查询成本估算决定的
失效原因:

  • 未正确创建使用索引(走索引的字段使用了函数或者类型转换(varchar字段不加引号))
  • 表数据量过少(此时优化器认为走索引也不会快多少)
  • 索引区分度不高

避免使用SELECT *

在查询数据时,尽量避免使用SELECT *,而是明确指定需要查询的字段。这样可以减少返回的数据量,提高查询效率。
弊端:

  • 增加查询解析器的成本
  • 无用字段增加网络消耗,特别是text

update语句优化

UPDATE语句的优化就是为了避免表中出现表级锁,从而影响并发的性能。

当UPDATE语句更新表数据时,WHERE条件使用的是索引字段,那么此时会出现行级锁,只是锁住这一行数据,对表中其他的数据没有任何影响,性能最高,但是当WHERE条件使用的不是索引字段时,此时就会出现表级锁,只有当UPDATE语句的事务提交完毕,表级锁才会释放,大大影响并发的性能

JOIN替代子查询,减少查询的次数

注意: 该原则并不适用所有场景,一次外部查询,一次嵌套查询,使用连结查询减少数据库的查询次数,提高查询效率
子查询执行顺序:先

course_urer表中数据量大约1000条,订单表大约300条
2.7s  > 1.2s 以内

UPDATE c_course_user
SET STATUS = 0
WHERE
	user_id = 1742078314821632001
AND order_id IN (
	SELECT
		id
	FROM
		d_order
	WHERE
		post_id IN (1716355306112122881)
)
________________________

UPDATE c_course_user
JOIN d_order ON c_course_user.order_id = d_order.id
SET c_course_user.status = 0
WHERE c_course_user.user_id = 1742078314821632001
AND d_order.post_id = 1716355306112122881;

course_urer表中数据量大约1000条,订单表大约300条,授权表数据约1000条

3.8s_>

UPDATE d_workflow_check
SET check_status = 1
WHERE
	business_id IN (
		SELECT
			order_id
		FROM
			d_order o
		JOIN c_course_user cu ON o.id = cu.order_id
		WHERE
			user_id = 1742078314821632001
		AND post_id IN (1716355306112122881)
	)

批量插入

减少对数据库的请求次数,注意批量数据大于500时,考虑分批量进行查询

group by order by

grop by的列也可以使用索引,提高查询效率

对表连结  on筛选, 分库分表 微服务

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

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

相关文章

004 - Hugo, 分类

004 - Hugo, 分类content文件夹 004 - Hugo, 分类 content文件夹 ├─.obsidian ├─categories │ ├─Python │ └─Test ├─page │ ├─about │ ├─archives │ ├─links │ └─search └─post├─chinese-test├─emoji-support├─Git教程├─Hugo分类├─…

如何在CSS中实现背景图片的渐变?

--引言 在CSS中,实现背景图片的渐变通常需要使用linear-gradient或者radial-gradient函数,这些函数可以与背景图像一起使用来创建渐变效果。然而,CSS的渐变并不直接支持使用图像作为渐变的颜色停止点。但你可以通过一些技巧来实现类似的效果…

2024年【高处安装、维护、拆除】模拟考试题库及高处安装、维护、拆除实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 高处安装、维护、拆除模拟考试题库是安全生产模拟考试一点通生成的,高处安装、维护、拆除证模拟考试题库是根据高处安装、维护、拆除最新版教材汇编出高处安装、维护、拆除仿真模拟考试。2024年【高处安装…

得物面试:Redis用哈希槽,而不是一致性哈希,为什么?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: Redis为何用哈希槽而不用一致性哈希? 最近…

Prompt Tuning:深度解读一种新的微调范式

阅读该博客,您将系统地掌握如下知识点: 什么是预训练语言模型? 什么是prompt?为什么要引入prompt?相比传统fine-tuning有什么优势? 自20年底开始,prompt的发展历程,哪些经典的代表…

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考

Sora时代,我们的AI应该何去何从?——关于Sora大模型的思考 一、Sora大模型:横空出世,让AI生成所有领域瑟瑟发抖二、Sora的出现代表了相关行业的灭亡?三、我们将何去何从? 一、Sora大模型:横空出世&#xf…

计算机毕业设计SSM基于的高校学习资源共享系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…

C++ 多起点的bfs(五十九)【第六篇】

今天我们来学习多起点的bfs 1.多起点的bfs 在普通的广度优先搜索问题中,为了得到从初始状态到达目标状态的最小操作数,则将初始状态放入队列中。离初始状态由近及远地不断扩展出新的状态,直到搜索到目的状态,或队列为空&#xff…

使用Docker部署JDK镜像

构建镜像 我们将已经准备好的docker-demo.jar包以及Dockerfile拷贝到虚拟机的/root/demo目录: 然后,执行命令,构建镜像: # 直接指定Dockerfile目录 docker build -t docker-demo:1.0 /root/demo 查看镜像列表: # 查看…

神经网络算法原理

目录 得分函数 数学表示 计算方法 损失函数 ​编辑 前向传播 反向传播 ​编辑 整体架构 正则化的作用 数据预处理 ​过拟合解决方法 得分函数 得分函数是在机器学习和自然语言处理中常用的一种函数,用于评估模型对输入数据的预测结果的准确性或匹配程度。…

函数、极限、连续——刷题(5

目录 1.题目:2.解题思路和步骤:3.总结:小结: 1.题目: 2.解题思路和步骤: 首先可能想到的是答案为0,但是不可以把 直接化简为n 这里要用到分子分母的平方差,sin^2的周期为π&#x…

WebServer 之 http连接处理(下)

目录 ✊请求报文--解析 流程图 && 状态机 状态机 -- 状态转移图 主状态机 从状态机 http 报文解析 HTTP_CODE 含义 从状态机 逻辑 主状态机 逻辑 🐞请求报文--响应 基础API stat mmap iovec writev 流程图 HTTP_CODE 含义(2) 代码分析 …

及其详细的Markdown基础-学习笔记(附有使用案例)

Markdown 基础语法 查看更多学习笔记:GitHub:LoveEmiliaForever 标题创建 标题语法格式 在文字前添加一至六个#即可创建标题 标题是有等级的,具体等级根据#个数决定 由于标题等级参与构建整篇文章的架构,编写时应该遵循如下规…

【C->Cpp】由C迈向Cpp(3)

正文开始: 目录 (一)函数重载 (1)函数重载 (2)函数重载实现原理 (二) 引用 (1)引用 (2)语法 i ,别名&am…

输入捕获模式测频率PWM输入模式(PWMI)测占空比

一、概念介绍 输出比较: 比较电路输入的CNT、CCR大小关系 ,在通道引脚输出高低电平 二、*频率知识、测量方法补充 * N/fc得到标准频率的时长,也就是待测频率的周期 测频法代码实现:修改对射式红外传感器计次(上升沿…

51_蓝桥杯_蜂鸣器与继电器

一 电路 二 蜂鸣器与继电器工作原理 2.1蜂鸣器与继电器 2.2 十六进制与二进制 二进制 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十六进制 0 1 2 3 4 5 6 7 8 9 A B C D E F 2.3非门 二 代码 …

数据集合

目录 并集 union union all 区别 交集 intersect 差集 minus 错误操作 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 常用的数学集合有:交集、并集、差集、补集 每一次查询实际上都会返回数据集合,…

【Anaconda】conda创建、删除、查看虚拟环境,安装pytorch

1.删除环境 首先退出现有的环境 conda deactivate然后查看要删除的环境名称与路径 conda env list接下来就可以删除环境了 有两种方法 方法1: conda env remove -p 要删除的虚拟环境路径对我来说就是: conda env remove -p D:\Anaconda3\envs\MVDet…

Screw自动生成数据库文档

Screw简介 官方地址 Screw可以根据数据库中的表自动生成HTML、Word、Markdown格式的文档。 Springboot 3.1集成 生成Springboot项目 Spring Initializr Maven依赖 <dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</…

LabVIEW焊缝缺陷超声检测与识别

LabVIEW焊缝缺陷超声检测与识别 介绍基于LabVIEW的焊缝缺陷超声检测与识别系统。该系统利用LabVIEW软件和数据采集卡的强大功能&#xff0c;实现了焊缝缺陷的在线自动检测&#xff0c;具有通用性、模块化、功能化和网络化的特点&#xff0c;显著提高了检测的效率和准确性。 随…