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

MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略

文章目录

    • 引言
    • 一、B+Tree索引核心原理
      • 1.1 索引数据结构演化
      • 1.2 B+Tree的存储结构
        • 通过主键查询(主键索引)商品数据的过程
        • 通过非主键(辅助索引)查询商品数据的过程
      • MySQL InnoDB 的索引原理
    • 二、执行计划深度解析
    • 三、索引失效的六大陷阱
      • 3.1 隐式类型转换
      • 3.2 索引列参与运算
      • 3.3 模糊查询通配符前置
      • 3.4 最左前缀原则违反
      • 3.5 OR条件使用不当
      • 3.6 统计信息不准确
    • 四、高性能索引设计策略
      • 4.1 覆盖索引优化
      • 4.2 前缀索引技巧
      • 4.3 联合索引排序策略
      • 4.4 索引下推优化(ICP)
    • 五、真实场景案例解析
      • 5.1 电商订单查询优化
      • 5.2 社交平台好友推荐
    • 结语

在这里插入图片描述

引言

数据库性能直接影响系统响应速度。作为关系型数据库的典型代表,MySQL的索引设计与优化是每个开发者必须掌握的技能。接下来我们将深入剖析MySQL的索引原理,结合真实场景案例,揭秘B+Tree的独特优势,并通过执行计划分析与优化策略,探讨如何构建高性能数据库系统。

我们经常会碰到如下问题:

  • 数据库索引底层使用的是什么数据结构和算法呢?

  • 为什么 MySQL InnoDB 选择 B+Tree 当默认的索引数据结构?

  • 如何通过执行计划查看索引使用详情?

  • 有哪些情况会导致索引失效?

  • 平时有哪些常见的优化索引的方法?

  • ……

无非就是对应

  • MySQL InnoDB 的索引原理;

  • B+Tree 相比于其他索引数据结构(如 B-Tree、二叉树,以及 Hash 表)的优势;

  • MySQL 执行计划的方法;

  • 导致索引失效的常见情况;

  • 常用的建立高效索引的技巧(如前缀索引、建立覆盖索引等)。


一、B+Tree索引核心原理

1.1 索引数据结构演化

深入理解二叉树、B树与B+树:原理、应用与实现

数据结构查询复杂度范围查询磁盘I/O效率适用场景
二叉树O(log n)小数据量精确查询
B-TreeO(log n)较好通用场景
B+TreeO(log n)优秀大数据量范围查询
Hash表O(1)不支持等值查询

1.2 B+Tree的存储结构

建个表如下:

CREATE TABLE `product`  (`id` int(11) NOT NULL,`product_no` varchar(20)  DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`price` decimal(10, 2) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
);

新增几条数据如下:
在这里插入图片描述

通过主键查询(主键索引)商品数据的过程

此时当我们使用主键索引查询商品 15 的时候,那么按照 B+Tree 索引原理,是如何找到对应数据的呢?

select * from product where id = 15

我们可以通过数据手动构建一个 B+Tree,它的每个节点包含 3 个子节点(B+Tree 每个节点允许有 M 个子节点,且 M>2),根节点中的数据值 1、18、36 分别是子节点(1,6,12),(18,24,30)和(36,41,52)中的最小值。

每一层父节点的数据值都会出现在下层子节点的数据值中,因此在叶子节点中,包括了所有的数据值信息,并且每一个叶子节点都指向下一个叶子节点,形成一个链表。如图所

在这里插入图片描述
比如想要查找数据值 15,B+Tree 会自顶向下逐层进行查找:

  • 将 15 与根节点的数据 (1,18,36) 比较,15 在 1 和 18 之间,所以根据 B+Tree的搜索逻辑,找到第二层的数据块 (1,6,12);

  • 在第二层的数据块 (1,6,12) 中进行查找,因为 15 大于 12,所以找到第三层的数据块 (12,15,17);

  • 在叶子节点的数据块 (12,15,17) 中进行查找,然后我们找到了数据值 15;

  • 最终根据数据值 15 找到叶子节点中存储的数据。

整个过程一共进行了 3 次 I/O 操作,所以 B+Tree 相比于 B 树和二叉树来说,最大的优势在于查询效率


通过非主键(辅助索引)查询商品数据的过程

如果使用商品编码查询商品(即使用辅助索引进行查询),会先检索辅助索引中的 B+Tree 的 商品编码,找到对应的叶子节点,获取主键值,然后再通过主键索引中的 B+Tree 树查询到对应的叶子节点,然后获取整行数据。这个过程叫回表。


B+Tree特点:

  • 多叉结构:单个节点存储多个键值,降低树高度(3-4层可支撑千万级数据)
  • 数据聚集:叶子节点形成有序双向链表,支持高效范围查询
  • 分层存储:非叶节点仅存索引键,叶节点存储完整数据(聚簇索引)或主键(辅助索引)

MySQL InnoDB 的索引原理

从数据结构的角度来看, MySQL 常见索引有 B+Tree 索引、HASH 索引、Full-Text 索引。

在这里插入图片描述

在实际应用中,InnoDB 是 MySQL 建表时默认的存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。

在创建表时,InnoDB 存储引擎默认使用表的主键作为主键索引,该主键索引就是聚簇索引(Clustered Index),如果表没有定义主键,InnoDB 就自己产生一个隐藏的 6 个字节的主键 ID 值作为主键索引,而创建的主键索引默认使用的是 B+Tree 索引。


二、执行计划深度解析

1存储商品信息的演示表 product:

CREATE TABLE `product`  (`id` int(11) NOT NULL,`product_no` varchar(20)  DEFAULT NULL,`name` varchar(255) DEFAULT NULL,`price` decimal(10, 2) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,KEY 'index_name' ('name').KEY 'index_id_name' ('id', 'name')
) CHARACTER SET = utf8 COLLATE = utf8_general_ci

表中包含了主键索引、name 字段上的普通索引,以及 id 和 name 两个字段的联合索引。现在我们来看一条简单查询语句的执行计划:

在这里插入图片描述

重点关注 type 字段, 表示数据扫描类型,也就是描述了找到所需数据时使用的扫描方式是什么,常见扫描类型的执行效率从低到高的顺序为(考虑到查询效率问题,全表扫描和全索引扫描要尽量避免):

    ALL(全表扫描);index(全索引扫描);range(索引范围扫描);ref(非唯一索引扫描);eq_ref(唯一索引扫描);const(结果只有一条的主键或唯一索引扫描)。

关键指标解读:

  • type:扫描类型(性能排序:const > ref > range > index > ALL)
  • key_len:索引使用长度(可判断是否使用完整索引)
  • possible_keys 字段表示可能用到的索引
  • key 字段表示实际用的索引
  • rows:预估扫描行数
  • Extra:额外信息(Using index/Using filesort等)

三、索引失效的六大陷阱

来看一个索引失效的例子:
在这里插入图片描述

这条带有 like 查询的 SQL 语句,没有用到 product 表中的 index_name 索引。

我们结合普通索引的 B+Tree 结构看一下索引失效的原因: 当 MySQL 优化器根据 name like ‘%路由器’ 这个条件,到索引 index_name 的 B+Tree 结构上进行查询评估时,发现当前节点的左右子节点上的值都有可能符合 ‘%路由器’ 这个条件,于是优化器判定当前索引需要扫描整个索引,并且还要回表查询,不如直接全表扫描。

当然,还有其他类似的索引失效的情况:

  • 索引列上做了计算、函数、类型转换操作,这些情况下索引失效是因为查询过程需要扫描整个索引并回表,代价高于直接全表扫描;

  • like 匹配使用了前缀匹配符 ‘%abc’;

  • 字符串不加引号导致类型转换;

所以, 如果 MySQL 查询优化器预估走索引的代价比全表扫描的代价还要大,则不走对应的索引,直接全表扫描,如果走索引比全表扫描代价小,则使用索引。

3.1 隐式类型转换

-- 字符串字段使用数字查询
SELECT * FROM user WHERE phone = 13800138000;

3.2 索引列参与运算

-- DATE_FORMAT函数导致索引失效
SELECT * FROM orders 
WHERE DATE_FORMAT(create_time, '%Y-%m') = '2023-07';

3.3 模糊查询通配符前置

-- 前导通配符无法使用索引
SELECT * FROM article WHERE content LIKE '%数据库%';

3.4 最左前缀原则违反

-- 联合索引(a,b,c)无法命中
SELECT * FROM table WHERE b = 2 AND c = 3;

3.5 OR条件使用不当

-- 其中一个条件无索引将导致全表扫描
SELECT * FROM products 
WHERE category_id = 5 OR price > 1000;

3.6 统计信息不准确

当数据分布变化超过10%时,需执行ANALYZE TABLE更新统计信息


四、高性能索引设计策略

4.1 覆盖索引优化

覆盖索引是指 SQL 中 query 的所有字段,在索引 B+tree 的叶子节点上都能找得到的那些索引,从辅助索引中查询得到记录,而不需要通过聚簇索引查询获得。假设我们只需要查询商品的名称、价格,有什么方式可以避免回表呢?

我们可以建立一个组合索引,即商品ID、名称、价格作为一个组合索引。如果索引中存在这些数据,查询将不会再次检索主键索引,从而避免回表。所以,使用覆盖索引的好处很明显,即不需要查询出包含整行记录的所有信息,也就减少了大量的 I/O 操作

-- 建立包含所有查询字段的联合索引
CREATE INDEX idx_order_status_time 
ON orders(status, create_time, total_amount);SELECT status, create_time, total_amount 
FROM orders 
WHERE status = 1 
ORDER BY create_time DESC;

4.2 前缀索引技巧

前缀索引就是用某个字段中,字符串的前几个字符建立索引,比如我们可以在订单表上对商品名称字段的前 5 个字符建立索引。使用前缀索引是为了减小索引字段大小,可以增加一个索引页中存储的索引值,有效提高索引的查询速度。在一些大字符串的字段作为索引时,使用前缀索引可以帮助我们减小索引项的大小。

但是,前缀索引有一定的局限性,例如 order by 就无法使用前缀索引,无法把前缀索引用作覆盖索引。

-- 对长文本字段前20字符建立索引
CREATE INDEX idx_product_desc 
ON products(product_desc(20));-- 计算最佳前缀长度
SELECT COUNT(DISTINCT LEFT(product_desc, 20)) / COUNT(*) 
FROM products;

4.3 联合索引排序策略

联合索引时,存在最左匹配原则,也就是按照最左优先的方式进行索引的匹配。比如联合索引 (userpin, username),如果查询条件是 WHERE userpin=1 AND username=2,就可以匹配上联合索引;或者查询条件是 WHERE userpin=1,也能匹配上联合索引,但是如果查询条件是 WHERE username=2,就无法匹配上联合索引。

另外,建立联合索引时的字段顺序,对索引效率也有很大影响。越靠前的字段被用于索引过滤的概率越高,实际开发工作中建立联合索引时,要把区分度大的字段排在前面,这样区分度大的字段越有可能被更多的 SQL 使用到。

-- 区分度高的字段在前
CREATE INDEX idx_user_region_gender 
ON users(region_code, gender);

在这里插入图片描述
区分度就是某个字段 column 不同值的个数除以表的总行数,比如性别的区分度就很小,不适合建立索引或不适合排在联合索引列的靠前的位置,而 uuid 这类字段就比较适合做索引或排在联合索引列的靠前的位置。


4.4 索引下推优化(ICP)

-- MySQL 5.6+ 自动启用,减少回表次数
SELECT * FROM employees 
WHERE last_name LIKE '张%' 
AND age > 30;

五、真实场景案例解析

5.1 电商订单查询优化

原始SQL:

SELECT * FROM orders 
WHERE status = 2 
AND payment_time BETWEEN '2023-07-01' AND '2023-07-31'
ORDER BY create_time DESC;

优化方案:

  1. 创建联合索引(status, payment_time, create_time)
  2. 使用覆盖索引减少回表
  3. 分页查询使用WHERE id > ?代替LIMIT深度翻页

5.2 社交平台好友推荐

-- 优化前(全表扫描):
SELECT user_id FROM relationships 
WHERE friend_id = 10086 
AND relation_type = 3;-- 优化后(反向索引):
CREATE INDEX idx_reverse_relation 
ON relationships(friend_id, relation_type);

结语

优秀的索引设计需要平衡查询效率与写入性能。建议遵循以下原则:

  1. 优先考虑最常用查询模式
  2. 单表索引不超过5个
  3. 联合索引字段数不超过3个
  4. 定期审查索引使用情况

通过理解B+Tree的底层原理,结合执行计划分析与实际业务场景,开发者可以构建出高效的数据访问方案。记住:没有最好的索引,只有最适合业务场景的索引设计。

在这里插入图片描述

相关文章:

MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略

文章目录 引言一、BTree索引核心原理1.1 索引数据结构演化1.2 BTree的存储结构通过主键查询(主键索引)商品数据的过程通过非主键(辅助索引)查询商品数据的过程 MySQL InnoDB 的索引原理 二、执行计划深度解析三、索引失效的六大陷…...

2025年数智化电商产业带发展研究报告260+份汇总解读|附PDF下载

原文链接:https://tecdat.cn/?p41286 在数字技术与实体经济深度融合的当下,数智化产业带正成为经济发展的关键引擎。 从云南鲜花产业带的直播热销到深圳3C数码的智能转型,数智化正重塑产业格局。2023年数字经济规模突破53.9万亿元&#xff…...

html实现手势密码

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>手势密码</title><style>body {font-fam…...

机器学习(八):K-Means聚类原理与实战

声明&#xff1a;未经允许禁止转载与抄袭。 前言 k k k均值&#xff08; k k k-means&#xff09;聚类算法是一种经典的无监督聚类算法&#xff0c;本文将深入解析其理论原理&#xff0c;并在真是数据集上进行算法实践&#xff0c;话不多说&#xff0c;请看下文。 算法原理 …...

从 Word 到 HTML:使用 Aspose.Words 轻松实现 Word 文档的高保真转换

从 Word 到 HTML&#xff1a;使用 Aspose.Words 轻松实现 Word 文档的高保真转换 前言一、环境准备二、核心代码实现1. 将 Word 转换为 HTML 文件流2. 优化超链接样式 三、测试效果四、总结 前言 在日常开发中&#xff0c;我们经常需要将 Word 文档转换为 HTML&#xff0c;用于…...

SQLMesh调度系统深度解析:内置调度与Airflow集成实践

本文系统解析SQLMesh的两种核心调度方案&#xff1a;内置调度器与Apache Airflow集成。通过对比两者的适用场景、架构设计和操作流程&#xff0c;为企业构建可靠的数据分析流水线提供技术参考。重点内容包括&#xff1a; 内置调度器的轻量级部署与性能优化策略Airflow集成的端到…...

【深度学习新浪潮】Grok过去两周的进展一览(2025.04.01)

1. Grok过去两周的进展一览 根据公开信息,Grok在过去两周的主要进展如下: Grok 3正式上线并开放 xAI于2025年3月30日宣布Grok 3正式向所有Premium+订阅用户开放,并同步将X平台的Premium+订阅费用上涨至月费近50美元、年费350美元。这是继Grok 2之后的重大升级,其推理能力和…...

Vue表单数据回显失败技术解析与修复指南!!!

Vue表单数据回显失败技术解析与修复指南 &#x1f680; 在Vue.js应用开发中&#xff0c;「父子组件通信」「动态弹窗」是经典功能组合。但当遇到关键场景表单数据无法回显时&#xff0c;你是否也在深夜加班改bug&#xff1f;本文通过完整案例分析&#xff0c;揭秘该问题背后深层…...

【Office办公】【Excel】VLOOKUP函数-高速查找指定匹配数据,可合并2个表格

VLOOKUP 是 Excel 中常用的查找函数&#xff0c;用于在表格或区域中按列查找特定值并返回对应行的其他列数据。以下是详细使用方法及注意事项&#xff1a; 函数语法 VLOOKUP(查找值, 表格范围, 列索引号, [匹配方式])查找值&#xff1a;要查找的值&#xff08;如单元格引用或…...

Java基础-21-基本语法-封装

封装&#xff08;Encapsulation&#xff09; 1. 什么是封装&#xff1f; 封装&#xff08;Encapsulation&#xff09;是面向对象编程&#xff08;OOP&#xff09;中的一个重要特性。它指的是将对象的属性和行为封装在一个类中&#xff0c;并提供访问控制机制&#xff0c;防止…...

SpringCloud概述

Spring Cloud Alibaba 1 系统架构演进 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。 1.1 单体架构 早期的软件系统通常是基于单体应用架构设计的&#xff0c;也就是将整个系统作为一个单一的…...

Kafka中的消息是如何存储的?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka中的消息是如何存储的&#xff1f;】面试题。希望对大家有帮助&#xff1b; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Kafka 中&#xff0c;消息是通过 日志&#xff08;Log&#xff09; 的方式进行存储的。…...

主流Web3公链的核心区别对比

以下是当前主流Web3公链的核心区别对比表&#xff0c;涵盖技术架构、性能、生态等关键维度&#xff1a; 特性以太坊 (Ethereum)SolanaBNB ChainPolygonAvalanche共识机制PoS&#xff08;信标链分片&#xff09;PoH&#xff08;历史证明&#xff09; PoSPoSA&#xff08;权益证…...

美甲预约管理系统基于Spring Boot SSM

目录 摘要 1. 引言‌ 1.1 研究背景与意义 1.2 国内外研究现状 ‌2. 系统需求分析‌ 2.1 功能需求 2.2 非功能需求 ‌3. 系统设计与实现‌ 3.1 系统架构设计 3.2 关键技术实现 3.3 系统模块实现 ‌3.3.1店铺管理‌ ‌3.3.2商品管理‌ ‌3.3.3用户管理‌ ‌3.3.4订…...

Doris Streamloader安装教程

官方连接&#xff1a;Doris Streamloader - Apache Doris 简单概述&#xff1a;Doris Streamloader 是一款用于将数据导入 Doris 数据库的专用客户端工具。 step1&#xff1a;安装go环境 [rootlocalhost ~]# rpm --import https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-…...

用Python做数据分析之数据统计

接下来说说数据统计部分&#xff0c;这里主要介绍数据采样&#xff0c;标准差&#xff0c;协方差和相关系数的使用方法。 1、数据采样 Excel的数据分析功能中提供了数据抽样的功能&#xff0c;如下图所示。Python 通过 sample 函数完成数据采样。 2、数据抽样 Sample是进行…...

H.264编码解析与C++实现详解

一、H.264编码核心概念 1.1 分层编码结构 H.264采用分层设计&#xff0c;包含视频编码层&#xff08;VCL&#xff09;和网络抽象层&#xff08;NAL&#xff09;。VCL处理核心编码任务&#xff0c;NAL负责封装网络传输数据。 1.2 NALU单元结构 // NAL单元头部结构示例 struc…...

OpenAI即将开源!DeepSeek“逼宫”下,AI争夺战将走向何方?

OpenAI 终于要 Open 了。 北京时间 4 月 1 日凌晨&#xff0c;OpenAI 正式宣布&#xff1a;将在未来几个月内开源一款具备推理能力的语言模型&#xff0c;并开放训练权重参数。这是自 2019 年 GPT-2 部分开源以来&#xff0c;OpenAI 首次向公众开放核心模型技术。 【图片来源于…...

音视频 四 看书的笔记 MediaPlayerService

Binder机制看这里 Binde机智 这是一个分割符 Binder机智 分割(goutou) Binder机制 MediaPlayerService多媒体框架中一个非常重要的服务。MediaPlayerService 我原称之为链接之王 图片来源 MediaPlayer 是客户端 C/S 中的CMediaPlayerService MediaPlayerService::Client 是服…...

android Fragment使用

在 Android Fragment 中&#xff0c;导入 id&#xff08;findViewById&#xff09;并给控件赋值的逻辑通常应该写在 onViewCreated() 方法中&#xff0c;而不是 onCreateView()。 Fragment 生命周期 & 适合的位置 方法作用适合的操作onCreateView()创建并返回 Fragment 的…...

LayaAir3.3.0-beta.3重磅更新!Spine4.2、2D物理、UI系统、TileMap等全面升级!

正式版推出前&#xff0c;说明3.3的功能还没开发完。所以&#xff0c;又一大波更新来了~ 下面对重点更新进行说明。 Spine的重要更新 3.3.0-beta.3版本开始&#xff0c;新增了Spine 4.2 的运行时库&#xff0c;Spine动画上可以支持物理特性了。例如&#xff0c;下图右侧女孩在启…...

deepseek v3-0324 化学键线式Canvas编辑器设计

化学键线式Canvas编辑器设计 下面是一个基于HTML5 Canvas的化学键线式编辑器的基本实现方案。这个编辑器允许用户绘制有机化学中常见的键线式结构。 基本HTML结构 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"…...

解决 CMS Old GC 频繁触发线上问题技术方案

目录 一、CMS GC 工作原理 二、现象分析 &#xff08;一&#xff09;具体表现说明 &#xff08;二&#xff09;触发条件 三、总结优化措施 &#xff08;一&#xff09;调整 CMS 启动条件&#xff1a;降低 Old 区触发阈值 1. 原理分析 2. 建议配置 &#xff08;二&…...

后端实现加解密工具类(记录)

后端利用3DES加解密工具类实现特殊字段加解密&#xff0c;比如个人信息、请求参数等 &#xff0c;可以自定义密钥和IV加密&#xff0c;代码如下&#xff0c;直接使用即可。 import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory…...

云原生技术赋能企业数字化转型:实战案例与架构演进

引言&#xff1a;数字化转型的云原生机遇 在VUCA时代背景下&#xff0c;某金融科技企业面临系统扩展性差、运维成本高企的困境。通过采用云原生技术栈&#xff0c;6个月内实现资源利用率提升300%&#xff0c;故障恢复时间从小时级缩短至分钟级。本文将深度解析该企业技术演进路…...

驱动开发系列49 - 搭建 Vulkan 驱动调试环境(编译 mesa 3D)- Ubuntu24.04

一:搭建Vulkan运行环境 安装vulkan依赖包: 1. sudo apt install vulkan-tools 2. sudo apt install libvulkan-dev 3. sudo apt install vulkan-utility-libraries-dev spirv-tools 4. sudo apt install libglfw3-dev libglm-dev 5. sudo apt install libxxf86vm-dev libxi-…...

自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)

系列文章目录 终章 1&#xff1a;Attention的结构 终章 2&#xff1a;带Attention的seq2seq的实现 终章 3&#xff1a;Attention的评价 终章 4&#xff1a;关于Attention的其他话题 终章 5&#xff1a;Attention的应用 目录 系列文章目录 前言 一、编码器的实现 二、解…...

Qt5.14.2+mingw64编译OpenCV3.4.14一次成功记录

上一文中编译opencv4.5成功了&#xff0c;但是使用过程中没有成功&#xff0c;网上很多的代码没法跑起来&#xff0c;所以才有了此文来编译一个低版本的opencv3的过程记录&#xff0c;全程截图。 一、软件安装 1.1 Python3.8版本安装路径:C:\Users\Administrator\AppData\Loca…...

【数据库原理】基础篇:MySQL基础入门与实战指南

前言 在当今数字化时代&#xff0c;数据已成为企业运营的核心资产之一。而MySQL作为一款广泛使用的开源关系型数据库管理系统&#xff0c;凭借其高性能、可靠性和易用性&#xff0c;成为众多开发者和企业的首选。本文将从MySQL的基础概念出发&#xff0c;逐步深入到实际操作&a…...

使用Python解析PPT文件并生成JSON结构详解

引言 PowerPoint&#xff08;PPT&#xff09;文件的自动化处理是办公自动化和数据提取的常见需求。本文将介绍如何通过Python的python-pptx库&#xff0c;将PPT文件的样式、结构、文本内容等信息解析为标准化的JSON格式&#xff0c;为后续的自动化处理、数据迁移或样式复用提供…...

C#:第一性原理拆解属性(property)

目录 第一步&#xff1a;从最基本的需求出发 第二步&#xff1a;引入控制需求 第三步&#xff1a;优化访问方式 第四步&#xff1a;剖析属性的本质 第五步&#xff1a;进一步简化和演化 自动属性的定义和作用 自动属性的特点和限制 第六步&#xff1a;总结属性的第一性…...

nacos 2.x使用java语言实现自定义Loadbalance

一、核心实现思路 Nacos 2.x 的负载均衡自定义支持两种模式&#xff1a; 基于 Ribbon 的兼容方案&#xff08;适用于 Spring Cloud 2020 之前版本&#xff09;基于 Spring Cloud LoadBalancer 的方案&#xff08;推荐&#xff0c;适配最新 Spring Cloud 2023 和 Nacos 2.x&am…...

torch.nn.Conv2d介绍——Pytorch中的二维卷积层

torch.nn.Conv2d是torch.nn模块中的二维卷积层类&#xff0c;用于构建神经网络中的二维卷积层。 1、基本语法 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)将 2D …...

ubuntu虚拟机裁剪img文件系统

1. 定制文件系统前期准备 将rootfs.img文件准备好&#xff0c;并创建target文件夹2. 挂载文件系统 sudo mount rootfs.img target #挂载文件系统 sudo chroot target #进入chroot环境3. 内裁剪文件系统 增删裁剪文件系统 exit #退出chroot环境 sudo umount target…...

一文详细讲解Python(详细版一篇学会Python基础和网络安全)

引言 在当今数字化时代&#xff0c;Python 作为一种简洁高效且功能强大的编程语言&#xff0c;广泛应用于各个领域&#xff0c;从数据科学、人工智能到网络安全等&#xff0c;都能看到 Python 的身影。而网络安全作为保障信息系统和数据安全的关键领域&#xff0c;其重要性不言…...

使用QT调试LidarView

前段时间使用VeloView想进行点云的显示&#xff0c;后来发现VeloView的尺子测距不好用&#xff0c;也没有筛选点的功能&#xff0c;就放弃了。kitware同家的还有LidarView&#xff0c;功能多一些&#xff0c;更新的时间更晚&#xff0c;而且还兼容速腾、禾赛等多家点云设备可以…...

JAVA:使用 Curator 进行 ZooKeeper 操作的技术指南

1、简述 Apache Curator 是一个基于 ZooKeeper 的 Java 客户端库&#xff0c;它极大地简化了使用 ZooKeeper 的开发工作。Curator 提供了高层次的 API&#xff0c;封装了很多复杂的 ZooKeeper 操作&#xff0c;例如连接管理、分布式锁、Leader 选举等。 在分布式系统中&#…...

【SpringCloud】LoadBalance-负载均衡

4. 负载均衡-LoadBalance 4.1 为什么需要负载均衡&#xff1f; 不知道各位心中有没有女神&#xff0c;通常来说一个女神就会有多个舔狗&#xff0c;那这些舔狗呢&#xff0c;就会心甘情愿的帮女神干活&#xff0c;假设女神小美现在有三个舔狗&#xff0c;小美喜欢让这三个舔狗…...

[250401] OpenAI 向免费用户开放 GPT-4o 图像生成功能 | Neovim 0.11 新特性解读

目录 OpenAI 向免费用户开放 GPT-4o 图像生成功能Neovim 0.11 新特性解读更简化的 LSP 设置和配置内置自动补全改进的悬停文档诊断信息增强更多默认键映射终端模拟器改进其他改进 OpenAI 向免费用户开放 GPT-4o 图像生成功能 2025年4月1日早上&#xff0c;OpenAI CEO Sam Altm…...

VBA数据库解决方案第二十讲:SQL在VBA中几种常见的表达方式

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...

SAIL-RK3588J 核心板技术方案——高精度装配式建筑机器人控制‌

&#xff08;本方案契合《建筑机器人产业目录》政策要求&#xff09; 一、方案背景与政策支持‌ ‌政策驱动‌ 2025年2月《建筑机器人产业目录》明确将‌“高精度建筑机器人控制设备”‌纳入重点补贴范围&#xff0c;要求定位精度≤0.5mm、支持实时质检与多机协同&#xff0c…...

人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!

人工智能在生物医药领域的应用地图&#xff1a;AIBC2025将于6月在上海召开&#xff01; 近年来&#xff0c;人工智能在生物医药行业中的应用受到广泛关注。 2024年10月&#xff0c;2024诺贝尔化学奖被授予“计算蛋白质设计和蛋白质结构预测”&#xff0c;这为行业从业人员带来…...

C#高级:利用LINQ进行实体列表的集合运算

问题引入&#xff1a; Teacher实体的唯一标识符是Name和Classes字段&#xff08;或者说这两个字段唯一确定一条数据&#xff09;&#xff0c;如何对两个实体列表做交集、差集运算呢&#xff1f;&#xff08;并集直接调用AddRange方法即可&#xff09; 一、重写方法实现 1.原…...

Python项目-基于Flask的个人博客系统设计与实现(2)

源代码 续 {% extends base.html %}{% block title %}评论管理{% endblock %}{% block content %} <div class"container py-4"><div class"row"><div class"col-md-3"><div class"list-group mb-4"><a h…...

2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题题解)(C++/Java题解)

记录刷题的过程、感悟、题解。 希望能帮到&#xff0c;那些与我一同前行的&#xff0c;来自远方的朋友&#x1f609; 大纲&#xff1a; 1、日期统计-&#xff08;解析&#xff09;-暴力dfs&#xff08;&#x1f609;蓝桥专属 2、01串的熵-&#xff08;解析&#xff09;-不要chu…...

前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。

首先luckysheet插件是支持在线替换excel内容编辑得但是浏览器无法调用本地文件&#xff0c;如果只是展示&#xff0c;让后端返回文件得二进制文件流就可以了&#xff0c;直接使用luckysheet展示。 这里我们使用xlsx-populate得node简单应用来调用本地文件&#xff0c;自己写一个…...

‌在 Fedora 系统下备份远程 Windows SQL Server 数据库的完整方案

‌一、环境准备与工具安装‌ ‌1. 安装 Microsoft SQL Server 命令行工具‌ Fedora 需安装 mssql-tools 和 ODBC 驱动&#xff1a; # 添加 Microsoft 仓库 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安装工具包 …...

从24GHz到71GHz:Sivers半导体的广泛频率范围5G毫米波产品解析

在5G技术的浪潮中&#xff0c;Sivers半导体推出了创新的毫米波无线产品&#xff0c;为通信行业带来高效、可靠的解决方案。这些产品支持从24GHz到71GHz的频率&#xff0c;覆盖许可与非许可频段&#xff0c;适应高速、低延迟的通信场景。 5G通信频段的一点事儿及Sivers毫米波射频…...

从【抖音安全与信任中心】观察企业如何做算法透明

抖音主动公开算法原理树立行业新标杆&#xff1a; “抖音安全与信任中心”网站&#xff08;95152.douyin.com&#xff09; 1 算法透明的几点准则 需涵盖技术逻辑公开、治理机制可查、用户参与共建等维度。以下是基于抖音案例总结的可行路径&#xff0c;以及几个准则&#xff1…...

html处理Base文件流

处理步骤 从服务返回的字符串中提取文件流数据&#xff0c;可能是Base64或二进制。将数据转换为Blob对象。创建对象URL。创建<a>元素&#xff0c;设置href和download属性。触发点击事件以下载文件。删除缓存数据 代码 // 假设这是从服务返回的Base64字符串&#xff08…...