当前位置: 首页 > news >正文

慢sql处理流程和常见案例

 思维导图:

 

  在 MySQL 数据库管理中,慢查询是影响系统性能的常见痛点。随着 MySQL 8 版本的普及,其新增特性(如 CTE、隐藏索引、JSON 格式执行计划等)为慢查询优化提供了更强大的工具。本文结合 MySQL 8 的特性,通过代码示例详解慢查询的定位、分析与优化全流程,从而提高数据库的性能。

一、开启慢查询日志:精准捕获性能瓶颈

1. 配置文件永久开启(推荐生产环境)

修改 MySQL 8 的配置文件my.cnf(Linux)或my.ini(Windows),添加以下核心配置:修改后需重启 MySQL 服务使配置生效。

[mysqld]
slow_query_log = 1                # 启用慢查询日志(8.0+默认关闭)
slow_query_log_file = /var/log/mysql/mysql-slow.log  # 日志文件路径
long_query_time = 1.0             # 慢查询阈值(超过1秒记录,建议根据业务调整)
log_queries_not_using_indexes = 1 # 记录未使用索引的查询(关键优化线索)
log_slow_admin_statements = 1     # 记录慢管理语句(如ALTER TABLE,8.0新增)

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log。如图所示:

 

2. 动态配置(临时调试,无需重启)

通过 SQL 命令实时开启慢日志(需SUPER权限):

SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;  -- 阈值设为1秒
SET GLOBAL log_queries_not_using_indexes = ON;

3. 日志分析:核心指标与工具

关键指标解读:

  • Query_time:查询执行时间(精确到微秒),直接反映慢查询严重程度。
  • Rows_examined:扫描的行数,若远大于Rows_sent(返回行数),说明存在大量无效扫描。
  • Full_scan:标记是否全表扫描(Yes表示未使用索引)。

分析工具:
原生工具:使用mysqldumpslow过滤日志(语法与 5.5 兼容):
 

# 按耗时排序,获取最慢的5条查询 
mysqldumpslow -s t -t 5 /var/log/mysql/mysql-slow.log # 按扫描行数排序,定位扫描行数最多的查询 
mysqldumpslow -s r -t 5 /var/log/mysql/mysql-slow.log

可视化工具:推荐使用pt-query-digest(Percona Toolkit 组件),生成包含执行频率、平均耗时、索引使用情况的详细报告:

pt-query-digest /var/log/mysql/mysql-slow.log > slow_query_analysis.txt

示例日志片段

# Time: 2025-05-05T15:00:00+08:00
# User@Host: app_user[app_user] @ 192.168.1.100 []
# Query_time: 2.865912  Lock_time: 0.000045  Rows_sent: 20  Rows_examined: 500000
# EXPLAIN for: SELECT * FROM orders WHERE status = 'processing' LIMIT 20;

 问题:扫描 50 万行仅返回 20 行,status字段未使用索引,触发全表扫描。

二、用 EXPLAIN ANALYZE 深度分析执行计划(MySQL 8 增强特性)

MySQL 8 引入EXPLAIN ANALYZE命令,可获取更精确的执行统计信息(需开启optimizer_switch中的derived_merge=off以避免优化器合并子查询)。核心关注字段:

1. type(连接类型,效率优先级)

类型说明优化目标
system单表且仅有一行数据(特殊const理想状态,无需优化
const主键 / 唯一索引精准匹配优先通过主键 / 唯一索引查询
range索引范围查询(如BETWEEN/IN合理使用索引,无需强制优化
ALL全表扫描(必须优化!)添加索引或改写查询条件

2. key与key_len

  • key=NULL:未使用索引,需检查WHERE条件是否触发索引失效。
  • key_len:索引使用的字节长度,反映是否完全使用联合索引(如(user_id, order_date)的key_len=8表示仅使用user_id列)。

3. Extra(关键优化信号)

  • Using filesort:文件排序(需通过索引覆盖ORDER BY字段)。
  • Using temporary:临时表(分组 / 排序时产生,尽量通过索引避免)。
  • Using index:覆盖索引(理想状态,无需回表)。


案例:

全表扫描优化(MySQL 8 专属 JSON 格式输出)原查询(未加索引): 

EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';

JSON 执行计划片段(简化后):

{"query_block": {"table": {"table_name": "users","access_type": "ALL",  -- 全表扫描"rows_examined_per_scan": 100000  -- 扫描10万行}}
}

优化后(添加索引并使用覆盖索引)

ALTER TABLE users ADD INDEX idx_email_cover (email, name, phone);  -- 覆盖索引
EXPLAIN ANALYZE SELECT name, phone FROM users WHERE email = 'user@example.com';

执行计划

{"query_block": {"table": {"table_name": "users","access_type": "ref",  -- 索引引用"rows_examined_per_scan": 1,"using_index": true  -- 覆盖索引,无需回表}}
}

效果:扫描行数从 10 万降至 1,查询时间从 2.5 秒缩短至 0.01 秒。

三、索引优化:MySQL 8 的新特性与经典规则

1. 避开索引失效的 5 大 “陷阱”

陷阱 1:Like'%前缀'导致索引失效

错误写法(全表扫描):

SELECT * FROM products WHERE name LIKE '%笔记本';  -- 以%开头,索引失效

优化(前缀匹配,索引有效):

SELECT * FROM products WHERE name LIKE '笔记本%';  -- 匹配“笔记本”开头的字符串

陷阱 2:OR条件混合无索引列

错误写法(索引失效):

SELECT * FROM orders WHERE user_id = 100 OR address LIKE '%上海';  -- user_id有索引,address无索引

优化方案

  • address添加索引(适合高频查询):
ALTER TABLE orders ADD INDEX idx_address (address(20));  -- 前缀索引(MySQL 8支持)

  • 改用UNION ALL(减少临时表开销):
SELECT * FROM orders WHERE user_id = 100
UNION ALL
SELECT * FROM orders WHERE address LIKE '%上海';

陷阱 3:多列索引未遵循 “最左匹配”

索引定义ALTER TABLE sales ADD INDEX idx_date_prod (order_date, product_id);
有效查询(使用索引):

-- 仅用第一列(范围查询)
SELECT * FROM sales WHERE order_date > '2025-01-01';
-- 用前两列(精准匹配)
SELECT * FROM sales WHERE order_date = '2025-01-01' AND product_id = 101;

无效查询(跳过第一列,索引失效):

SELECT * FROM sales WHERE product_id = 101;  -- 仅用第二列,不使用索引

2. MySQL 8 专属优化技巧

(1)隐藏索引(测试索引有效性)

通过INVISIBLE关键字临时隐藏索引,测试其对查询的影响:

ALTER TABLE users ALTER INDEX idx_email INVISIBLE;  -- 隐藏索引
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';  -- 观察是否走全表扫描
ALTER TABLE users ALTER INDEX idx_email VISIBLE;  -- 恢复索引

(2)降序索引(优化倒序排序)

MySQL 8 支持降序索引,避免DESC排序时的文件排序:

ALTER TABLE orders ADD INDEX idx_order_date_desc (order_date DESC);
-- 优化后无需文件排序
SELECT * FROM orders ORDER BY order_date DESC LIMIT 10;

四、数据库结构优化:从设计层减少查询压力

1. 拆分大表:分离高频与低频字段

场景user_info表包含 30 个字段,其中resume(简历)和certificate(证书)字段极少使用,导致全表扫描缓慢。

优化步骤

  1. 创建高频字段表user_basic(存放常用字段):
CREATE TABLE user_basic (id BIGINT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

 

    2.创建低频字段表user_extend通过外键关联):

CREATE TABLE user_extend (id BIGINT PRIMARY KEY,resume TEXT,certificate JSON,  -- MySQL 8支持原生JSON类型FOREIGN KEY (id) REFERENCES user_basic(id)
);

效果:高频查询(如登录、用户列表)仅访问user_basic,扫描行数减少 60%。

2. 中间表优化复杂关联查询

场景:频繁统计 “用户近 30 天订单金额”,需关联usersordersorder_items三张表,执行时间超过 3 秒。


优化方案:创建统计中间表user_order_stats,每日定时同步数据:

CREATE TABLE user_order_stats (user_id BIGINT PRIMARY KEY,total_amount DECIMAL(10, 2),order_count INT,last_update DATE,INDEX idx_last_update (last_update)  -- 按时间查询索引
);-- 替代复杂关联查询(原需3表JOIN)
SELECT total_amount FROM user_order_stats WHERE user_id = 123 AND last_update = CURDATE();

效果:查询时间从 3 秒降至 0.1 秒,消除多表 JOIN 开销。

五、实战技巧:处理高频慢查询场景

1. 深度分页优化(LIMIT offset, size性能问题)

问题LIMIT 100000, 20需扫描 100020 行,丢弃前 100000 行,效率极低。

MySQL 8 优化方案

  • 方案 1:利用覆盖索引减少回表
-- 先获取主键(减少扫描字段)
SELECT id FROM orders ORDER BY create_time LIMIT 100000, 20;
-- 再通过主键批量查询(IN操作比子查询高效)
SELECT * FROM orders WHERE id IN (100001, 100002, ..., 100020);

  • 方案 2:记录上次分页 ID(滚动分页)
-- 基于上次最大ID分页,避免偏移量累积
SELECT * FROM orders WHERE id > 100000 ORDER BY id LIMIT 20;

 

2. 分解关联查询:应用层组装结果(适合高并发)

原复杂查询(3 表 JOIN,执行时间 2 秒):

SELECT u.username, o.order_id, p.product_name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id
WHERE u.country = 'China' AND o.status = 'paid';

优化步骤

  1. 查询用户 ID 列表:
SELECT id, username FROM users WHERE country = 'China';  -- 单表查询,0.05秒

     2. 查询订单 ID 与产品 ID:

SELECT order_id, product_id FROM orders WHERE user_id IN (1,2,3) AND status = 'paid';  -- 0.1秒

    3.查询产品名称:

SELECT product_id, product_name FROM products WHERE product_id IN (101, 102);  -- 0.03秒

总耗时降至 0.18 秒,相比原查询提升 10 倍以上。

六、MySQL 8 新增特性助力优化

1. CTE(公共表表达式)简化复杂子查询

-- 原嵌套子查询(可读性差,易触发全表扫描)
SELECT * FROM orders WHERE user_id IN (SELECT id FROM users WHERE score > 80);-- 改用CTE(清晰且便于优化器分析)
WITH high_score_users AS (SELECT id FROM users WHERE score > 80
)
SELECT * FROM orders WHERE user_id IN (SELECT id FROM high_score_users);

2. 索引统计信息自动更新(8.0.17+)

通过AUTO_RECALCULATE参数自动更新索引统计信息,避免因统计信息陈旧导致的执行计划偏差:

ALTER TABLE users ALTER INDEX idx_email AUTO_RECALCULATE DEFAULT ON;

七、最佳实践:建立慢查询优化闭环

  1. 定期审计流程

    • 每日通过SHOW GLOBAL STATUS LIKE 'Slow_queries'监控慢查询数量。
    • 每周用pt-query-digest生成报告,重点优化Rows_examined > 5万Query_time > 1的语句。
  2. 索引设计三原则

    • 为高频查询的WHERE/ORDER BY/GROUP BY字段创建索引。
    • 联合索引优先包含过滤性强的字段(如user_idstatus更适合作为第一列)。
    • 使用EXPLAIN ANALYZE JSON验证索引有效性,避免过度索引(超过 5 个索引的表需评估)。
  3. 监控与预警

    • 通过 Prometheus+Grafana 监控com_selectsort_merge_passes(排序合并次数)等指标。
    • 当慢查询数量突然增加 50% 时,触发短信 / 邮件预警,快速定位问题。

总结

MySQL 8 的慢查询优化需要结合版本特性与经典优化理论,从 “日志分析→执行计划诊断→索引优化→结构调整” 四个层面逐层深入。通过EXPLAIN ANALYZE的精准分析、覆盖索引的合理设计、以及大表拆分等架构优化,多数慢查询问题可迎刃而解。记住:优化的核心是让数据库 “少干活”—— 减少扫描行数、避免临时表与文件排序、利用索引覆盖查询。持续迭代优化策略并结合监控体系,才能确保 MySQL 在高并发场景下稳定高效运行。

相关文章:

慢sql处理流程和常见案例

思维导图: 在 MySQL 数据库管理中,慢查询是影响系统性能的常见痛点。随着 MySQL 8 版本的普及,其新增特性(如 CTE、隐藏索引、JSON 格式执行计划等)为慢查询优化提供了更强大的工具。本文结合 MySQL 8 的特性,通过代码…...

Kubernetes控制平面组件:Controller Manager 之 内置Controller详解

云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...

E-R图作业

1.一个图书馆借阅管理数据库要求提供下述服务: (1)可随时查询书库中现有书籍的品种、数量与存放位置。所有各类书籍均可由书号惟一标识。 (2)可随时查询书籍借还情况,包括借书人单位…...

debuginfo详解

debuginfo 是 Linux 系统中存储调试符号和源代码信息的特殊软件包,用于分析内核或用户态程序的崩溃转储文件(如 vmcore、coredump)。它在调试复杂问题(如内核崩溃、程序段错误)时至关重要。以下是其核心作用、安装方法…...

Android学习总结之GetX库篇(场景运用)

状态管理 在一个复杂的 Flutter 应用里,怎样借助 GetX 管理多个相互关联的状态,并且保证代码的可维护性和性能? 考察点:对 GetX 状态管理的深入理解,以及在复杂场景下运用它的能力。 解答思路: 采用模块…...

android-ndk开发(5): 编译运行 hello-world

android-ndk开发(5): 编译运行 hello-world 2025/05/05 1. 概要 hello-world 是每一门语言的第一个样例程序, 跑通它, 在一段时间内你会相当顺畅: 可以边学边实验, 根据运行结果得到反馈。 而对于 android-ndk 开发而言&#…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】6.1 客户分群分析(RFM模型构建)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL数据分析实战:RFM模型构建实现客户分群分析6.1 客户分群分析——RFM模型构建6.1.1 RFM模型核心指标解析6.1.2 数据准备与清洗规范数据表结构设计数据清…...

stm32之TIM定时中断详解

目录 1.引入1.1 简介1.2 类型1.2.1 基本定时器1.2.2 通用定时器1. 触发控制单元 (Trigger Control Unit)2. 输入捕获单元 (Input Capture Unit)3. 输出比较单元 (Output Compare Unit)4. CNT 计数器5. 自动重装载寄存器 (ARR)6. 预分频器 (PSC)7. 中断与 DMA 事件8. 刹车功能 (…...

【Hive入门】Hive安全管理与权限控制:用户认证与权限管理深度解析

目录 引言 1 Hive安全管理体系概述 2 Hive用户认证机制 2.1 Kerberos集成认证 2.1.1 Kerberos基本原理 2.1.2 Hive集成Kerberos配置步骤 2.1.3 Kerberos认证常见问题排查 2.2 LDAP用户同步 2.2.1 LDAP协议概述 2.2.2 Hive集成LDAP配置 2.2.3 LDAP与Hive用户同步架构…...

解决DNS劫持问题

什么是DNS劫持? DNS劫持(DNS Hijacking)是指通过篡改DNS配置,将用户的域名解析请求引导到恶意服务器的攻击方式。这种攻击常见于恶意软件、路由器漏洞或DNS配置被修改的情况下。攻击者通过这种方式控制了用户访问的网站&#xff…...

android-ndk开发(1): 搭建环境

android-ndk开发(1): 搭建环境 2025/05/05 1. 目的 写一些 C/C 代码, 例如 cv 基础算法, 并交叉编译到 android 平台。 不涉及 JNI、 Java、 Kotlin, 暂不涉及 rust。 基本上能适用于华为鸿蒙的 ohos ndk。 那么, 为了完成交叉…...

力扣面试150题-- 翻转二叉树

Day 41 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...

开源模型应用落地-qwen模型小试-Qwen3-8B-推理加速-vLLM(一)

一、前言 随着大语言模型的参数规模持续膨胀,如何在有限算力下实现高效推理成为行业焦点。阿里云推出的Qwen3-8B,凭借其卓越的语言理解与生成能力,已在多个基准测试中展现竞争力。而vLLM框架作为大模型部署的“加速器”,通过PagedAttention实现内存的高效管理,并支持连续批…...

brep2seq kaggle安装 micromamba conda环境

https://github.com/zhangshuming0668/Brep2Seq Micromamba Installation — documentation !curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba A Synthetic CAD Models Dataset for Deep Learning kaggle只有20g,等我有…...

钩子函数和参数:Vue组件生命周期中的自定义逻辑

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...

SpringBoot企业级开发之【文件上传】

看一下我们的需求: 接口文档: 分析思路: 现在我们先实现后端先: 实操: 一.存储到本地磁盘: 1.Controller 创建一个FileUploadController类 package org.huangyingyuan.controller;import org.huangyingyu…...

Linux系统安装PaddleDetection

一、安装cuda 1. 查看设备 先输入nvidia-smi,查看设备支持的最大cuda版本,选择官网中支持的cuda版本 https://www.paddlepaddle.org.cn/install/quick?docurl/documentation/docs/zh/install/conda/linux-conda.html 2. 下载CUDA并安装 使用快捷键…...

JVM 内存结构全解析

带你深入 JVM 内存结构,搞懂运行时数据区到底是怎么回事 JVM 的内存结构到底长什么样?程序计数器、虚拟机栈、堆、方法区、直接内存到底有什么用?这篇文章将从实际运行角度出发, 用一篇文章彻底讲透 JVM 的运行时数据区。一、为什么你必须搞懂 JVM 内存结构? 在一次线上…...

K8S node ARP 表爆满 如何优化

当 Kubernetes 节点的 ARP 表爆满时,可能会导致网络通信故障。以下是针对该问题的优化策略和解决方案: 一、ARP 表爆满的危害 网络不通:新的 ARP 请求无法被处理,导致数据包无法转发。性能下降:ARP 表查找效率降低&a…...

SpringMVC——第7章:HttpMessageConverter

一、HttpMessageConverter HttpMessageConverter是Spring MVC中非常重要的一个接口。翻译为:HTTP消息转换器。该接口下提供了很多实现类,不同的实现类有不同的转换方式。 1.什么是HTTP消息 HTTP消息其实就是HTTP协议。HTTP协议包括请求协议和响应协议。…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】4.4 异构数据源整合(CSV/JSON/Excel数据导入)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL异构数据源整合:CSV/JSON/Excel数据导入全攻略4.4 异构数据源整合:多格式数据导入实战4.4.1 CSV数据导入:高效批量处理4.4.1.1…...

在macOS上安装windows系统

使用Boot Camp 1. 准备工作:确认Mac满足Boot Camp系统要求,准备好Windows安装光盘或ISO映像文件,以及一个至少8GB的空白USB闪存驱动器用于保存驱动程序。 2. 打开Boot Camp助理:在“应用程序”文件夹的“实用工具”中找到“Boot…...

最长回文子串(动规 + 中心拓展)

目录 [BM73 最长回文子串](https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af?tpId295&tags&title&difficulty0&judgeStatus0&rp0&sourceUrl/exam/oj?questionJobId10&subTabNameonline_coding_page)1. 动态规划(1)状态表示:…...

学习海康VisionMaster之亮度测量

一:进一步学习了 今天学习下VisionMaster中的亮度测量:这个和前面学习的都不一样了,这个是测量ROI区域内的平均亮度等 1:什么是亮度测量? 我们工业上用的相机里面有一个感光芯片(CCD/CMOS)&…...

LeetCode 238:除自身以外数组的乘积(Java实现)

文章目录 **题目描述**解决思路1. 两次遍历法(左右乘积法)2. 核心思想 Java代码实现复杂度分析示例说明步骤分解 注意事项总结 题目描述 给定一个整数数组 nums,返回一个数组 answer,其中 answer[i] 等于 nums 中除 nums[i] 之外…...

LintCode第23题-判断数字与字母字符 第145题-大小写转换 第283题-三数之中的最大值

思路: 直接使用包装类的方法来判断 比如: isLetter(char c)判断是否是字母(包括大小写、非英语字母也行) isDigit(char c)判断是否是数字(0~9) isLetterOrDigit(char c)是否是字母或数字(等价于 isLetter isLower…...

Visual Studio 项目转Qt项目

1. 先确保qmake 和 minGW (g) 路径都在系统变量内;或者通过WinR -> cmd 来检测, 如果能够 显示qmake 的信息 , g 的信息 , 就说明设置环境变量成功。 2. 打开项目文件夹,在这里打开cmd, 换…...

判断字符是否唯一 --- 位运算

目录 一:题目 二:算法与原理 三:代码分析 一:题目 题目链接:面试题 01.01. 判定字符是否唯一 - 力扣(LeetCode) 二:算法与原理 三:代码分析 class Solution { publ…...

react路由使用方法

react路由常用方法 一、router安装与基础路由二、路由跳转三、路由参数四、路由嵌套无论是小程序端、web端还是移动端前端开发都需要使用到路由组件,学会了路由之后便可以灵活开发各种交互页面。可以说路由在前端开发中占有非常重要的位置。在React中,路由使用方式和Vue比较相…...

Wannier90文件与参数

Wannier90源码https://github.com/wannier-developers/wannier90/releases/tag/v3.1.0 用法 Wannier90 可以以两种模式运行: 后处理模式 Post-processing mode:从文件中读取第一性原理代码计算得到的重叠和投影。我们预计这是使用 wannier90 最常见的…...

学习黑客Nmap 原理

练气期第一重 — 神识探查术(Nmap 原理) 场景设定 诸位道友(学生)刚踏入信息安全修真界,手中只有一柄“网路灵剑”(本地终端)。想要探知远处服务器的灵脉(端口)、功法&am…...

VBA信息获取与处理专题五:VBA利用CDO发送电子邮件

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…...

Git 第一讲---基础篇 git基础概念与操作

前言: Git,作为目前全球最流行的分布式版本控制系统,以其高效、灵活和强大的分支管理能力,成为开发者手中不可或缺的工具。从个人开源项目到企业级应用,Git的身影无处不在。然而,对初学者而言,…...

心衰生物标志物NT-ProBNP和BNP

B型利钠肽(BNP)和N末端B型利钠肽原(NT-proBNP)都属于利尿钠肽(NP)家族。当发生心衰时,NT-ProBNP和BNP的浓度会升高,它们是心衰(HF)和心功能障碍诊疗中应用最广…...

Winform(11.案例讲解1)

今天写两个案例,用于更好的理解控件的使用 在写之前先写一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _1.案例讲解 { internal class Student { public string …...

卡尔曼滤波详解

1. 卡尔曼滤波能解决什么问题? 卡尔曼滤波用于解决含噪声的动态系统状态估计问题,例如: 通过GPS和IMU数据估计车辆位置 通过电压电流测量估计电池电量(SOC) 雷达追踪飞行器轨迹 它的核心优势是: 递归计算:只需前一…...

数据类型:String

String目录 SetGetMsetMgetIncrIncrbySubstrGetrangeSetrange String是字符串类型, redis给我们提供了String类型的value, 但是内部的实现一共有三种: int、embstr、raw; 三种的不同之处在于当value长度较小的时候使用embstr和int…...

【C/C++】inline关键词

C inline 关键字学习笔记 一、什么是 inline 函数? inline(内联)是 C 中的一个关键字,表示“将函数的代码直接插入到调用点”,以减少函数调用开销,提升执行效率。 ✅ 注意:inline 是一种“请求…...

Hive安装与配置教程

Hive安装与配置教程 1. 环境准备 1.1 系统要求 Java 8或更高版本Hadoop 2.x或更高版本MySQL或其他关系型数据库(用于存储元数据) 1.2 安装依赖 # 安装Java sudo apt update sudo apt install openjdk-8-jdk# 安装MySQL sudo apt install mysql-serv…...

C++负载均衡远程调用学习之获取主机信息功能

目录 01Lars-lbAgentV0.2-赋值均衡数据结构关系分析 02 Lars-lbAgent0.2-host_info-load_balance-route_lb数据结构的定义 03Lars-lbAgentV0.2-proto协议的定义 04 Lars-lbAgentV0.2-route_lb与UDP server的关联 05 -Lars-lbAgentV0.2-route_lb与UDP server的关联 06Lars…...

C++ 适配器模式详解

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间能够协同工作。 概念解析 适配器模式的核心思想是: 接口转换:将一个类的接口转换成客户希望的另一个接口 兼容性:使原本由于接…...

2025.5.5总结

今日感悟:这假期就这样结束了,玩了一次滑板,打扫了一次租房,出去逛了一次街,看完了一本书,追了一部剧。既没有家人,也没有能一同畅饮的同学,更没有对象,显得确实有些孤独…...

数据链路层(MAC 地址)

目录 一、前言: 二、以太网: 三、MAC 地址的作用: 四、ARP协议: 一、前言: 数据链路层主要负责相邻两个节点之间的数据传输,其中,最常见数据链路层的协议有 以太网(通过光纤 / 网…...

kotlin 05flow -从 LiveData 迁移到 Kotlin Flow 完整教程

一 从 LiveData 迁移到 Kotlin Flow 完整教程 LiveData 长期以来是 Android 架构组件中状态管理的核心,但随着 Kotlin Flow 的成熟,Google 官方推荐将现有 LiveData 迁移到 Flow。本教程基于官方文章并扩展实践细节,完成平滑迁移。 一、为什…...

PostgreSQL 的 pg_ls_waldir 函数

PostgreSQL 的 pg_ls_waldir 函数 pg_ls_waldir 是 PostgreSQL 中用于列出预写式日志(WAL)目录内容的重要函数,特别适用于 WAL 文件管理和数据库恢复场景。 一、函数基本说明 语法 pg_ls_waldir() RETURNS SETOF text功能 返回 WAL 目录中所有文件的名称集合在…...

形式化数学——Lean求值表达式

作为学习 Lean 的程序员,最重要的是理解求值的工作原理。求值是求得表达式的值的过程,就 像算术那样。例如,15 - 6 的值为 9,2 (3 1) 的值为 8。要得到后一个表达式的值,首先将 3 1 替换为 4,得到 2 4&…...

杰理-AC696音箱linein无法插入检测

杰理-AC696音箱linein无法插入检测 阻值选用1k,原公版原理图上68k,导致内部上拉电压一直不能掉下来,软件一直无法检测到。...

zst-2001 历年真题 程序设计语言

程序设计语言1 b 程序设计语言2 c 程序设计语言3 a 程序设计语言4 b中解释语言可以用高级语言编写 c优化 d反了 a 程序设计语言5 c 程序设计语言6 重复就是循环 b 程序设计语言7 a 程序设计语言8 c就是malloc,动态扩展数组,和类型没什…...

VirtualBox调整虚拟机内存和CPU

当我们配置的虚拟机内存或CPU不足以支撑开发需要时,需要及时调整内存和CPU大小。调整前如果虚拟机在运行,需要先关机。 下面的步骤是居于VirtualBox 6.1版本,不同版本的操作界面会有些许差异。 1.选中要调整的虚拟机,点击设置 2…...

SpringMVC框架详解与实践指南

文章目录 一、三层架构与MVC模型1. 三层架构2. MVC模型 二、SpringMVC入门案例1. 环境搭建2. 核心配置3. 编写Controller 三、执行流程与组件分析四、RequestMapping注解五、请求参数绑定1. 基本类型与对象绑定2. 嵌套对象与集合绑定 六、中文乱码解决方案(前端传到后端)1. Str…...