【RAG】11种Chunking Strategies分块策略介绍和选择
【今日鸡汤】学习之路上,勤奋是比 “聪明” 远远更珍贵的品质。
参考原文地址:https://masteringllm.medium.com/11-chunking-strategies-for-rag-simplified-visualized-df0dbec8e373
在构建强大的检索增强生成(RAG)系统时,一个至关重要的环节就是分块(Chunking)。它直接影响着系统检索的效率和生成内容的质量。
简单来说,分块就是将大型文档分割成更小、更易于管理的部分,方便后续的索引和检索。
本文将带你深入了解11种常用的RAG分块策略,并通过可视化图解,让你轻松掌握各种方法的优缺点以及适用场景。
为什么分块策略很重要?
好的分块策略能带来诸多好处:
-
效率提升: 更小的块降低了检索时的计算开销。
-
相关性提高: 精确的块能增加检索到相关信息的几率。
-
上下文保留: 合理的分段能保持信息的完整性,确保生成连贯的回复。
但如果分块策略不当,也可能导致:
-
上下文丢失: 在不合理的位置分割信息会破坏其含义。
-
信息冗余: 重叠的分段可能会引入重复信息。
-
一致性问题: 可变长度的块会增加检索和索引的复杂性。
11种分块策略介绍
1. 固定长度分块(Fixed-Length Chunking)
-
原理: 将文本按照预定义的长度(例如,字符数或Token数量)分割成块。
-
优点: 简单易实现,chunk大小均匀,易于索引。
-
缺点: 可能破坏句子或段落的完整性,导致上下文丢失。
-
适用场景: 简单文档、FAQ,或对处理速度要求高的场景。
-
实现建议: 选择合适的chunk大小,可以结合滑动窗口机制缓解上下文丢失问题。
2. 基于句子的分块(Sentence-Based Chunking)
-
原理: 以句子为单位分割文本。
-
优点: 保持句子完整性,易于实现(借助NLP工具)。
-
缺点: 单个句子可能上下文信息不足,句子长度差异可能导致chunk大小不一致。
-
适用场景: 简短、直接的回复,例如客户查询或对话式AI。
-
实现建议: 使用NLP库进行句子边界检测,可以将短句子合并以创建更大的块。
3. 基于段落的分块(Paragraph-Based Chunking)
-
原理: 以段落为单位分割文本。
-
优点: 包含比句子更丰富的上下文,符合文本的自然结构。
-
缺点: 段落长度差异较大,长段落可能超出模型Token限制。
-
适用场景: 结构化文档,例如文章、报告或论文。
-
实现建议: 监控chunk大小,避免超出Token限制,必要时进一步拆分长段落。
4. 滑动窗口分块(Sliding Window Chunking)
-
原理: 使用滑动窗口在文本上创建重叠的块,相邻块共享部分内容。
-
优点: 保持上下文连续性,提高检索的准确性。
-
缺点: 存在冗余信息,计算和存储成本较高。
-
适用场景: 需要跨章节保持上下文的文档,例如法律或医学文本。
-
实现建议: 根据文档特性优化窗口大小和重叠比例,使用去重技术处理冗余信息。
5. 语义分块(Semantic Chunking)
-
原理: 利用嵌入或机器学习模型,根据语义意义分割文本,确保每个chunk在主题或想法上具有连贯性。
-
优点: 上下文相关性好,灵活性高。
-
缺点: 需要高级NLP模型和计算资源,处理时间较长。
-
适用场景: 需要深度理解的复杂查询,例如技术手册或学术论文。
-
实现建议: 使用预训练模型进行语义分割,平衡计算成本和chunk粒度。
6. 递归分块(Recursive Chunking)
-
原理: 使用层级分隔符(如标题、副标题、段落、句子)逐步将文本分解成更小的块。
-
优点: 维护文档的结构关系,适用于大型文本。
-
缺点: 实现复杂,最小的块可能仍然会丢失上下文。
-
适用场景: 大型、层级结构的文档,例如书籍或大型报告。
-
实现建议: 使用文档结构(如HTML标签)识别层次结构,存储每个块在层次结构中的位置信息。
7. 上下文增强分块(Context-Enriched Chunking)
-
原理: 通过添加来自周围块的摘要或元数据来丰富每个块,保持序列中的上下文。
-
优点: 增强上下文信息,提高生成内容的连贯性。
-
缺点: 需要额外处理生成摘要或元数据,存储开销增加。
-
适用场景: 需要跨多个块保持一致性的长文档。
-
实现建议: 生成简洁的摘要,可以将关键术语或概念作为元数据添加。
8. 模态特定分块(Modality-Specific Chunking)
-
原理: 分别处理不同类型的内容(文本、表格、图像),并根据其性质进行分块。
-
优点: 针对不同内容类型进行优化,提高检索准确性。
-
缺点: 实现复杂,需要对每种模态进行自定义逻辑,整合来自不同模态的信息具有挑战性。
-
适用场景: 混合媒体文档,例如科学论文或用户手册。
-
实现建议: 对包含文本的图像使用OCR,将表格转换为结构化数据格式,在不同模态之间保持一致的索引系统。
9. 智能分块(Agentic Chunking)
-
原理: 利用大型语言模型(LLM)分析文本,并根据内容结构和语义建议分块边界。
-
优点: 智能分段,能够有效处理多样化和非结构化内容。
-
缺点: 计算密集型,成本较高。
-
适用场景: 在需要保留意义和上下文的情况下处理复杂文档。
-
实现建议: 对关键文档选择性地使用,优化LLM提示词以高效地识别逻辑分块边界。
10. 子文档分块(Subdocument Chunking)
-
原理: 总结整个文档或大章节,并将这些总结作为元数据附加到各个分块上。
-
优点: 允许检索系统在多个上下文级别上操作,提供额外的信息层。
-
缺点: 需要生成和管理摘要,增加了索引系统的复杂性。
-
适用场景: 提高大规模文档集合中的检索效率。
-
实现建议: 使用NLP技术自动进行摘要处理,高效存储摘要以最小化存储影响。
11. 混合分块(Hybrid Chunking)
-
原理: 结合多种分块策略,以适应不同查询类型或文档结构。
-
优点: 灵活性高,能够在不同应用场景中平衡速度和准确性。
-
缺点: 需要复杂的决策算法,维护成本较高。
-
适用场景: 适用于处理多种查询和文档类型的通用系统。
-
实现建议: 制定选择分块策略的标准,进行广泛的测试和验证以确保可靠性。
不同分块策略的特点
策略 | 上下文保留能力 | 实现复杂度 | 计算成本 | 最佳应用场景 |
Fixed-Length Chunking 固定长度分块 | 低 | 低 | 低 | 简单文档,对速度要求高的应用 |
Sentence-Based Chunking 基于句子的分块 | 中等 | 低 | 低 | 短查询,对话式AI |
Paragraph-Based Chunking 基于段落的分块 | 中等到高 | 低 | 中等 | 结构化文档 |
Sliding Window Chunking 滑动窗口分块 | 高 | 中等 | 高 | 对上下文要求严格的文本 |
Semantic Chunking 语义分块 | 高 | 高 | 高 | 技术或学术文档 |
Recursive Chunking 递归分块 | 高 | 中等 | 中等 | 大型,分层结构的文档 |
Context-Enriched Chunking 上下文增强分块 | 非常高 | 高 | 高 | 需要连贯性的长文档 |
Modality-Specific Chunking 模态特定分块 | 可变 | 高 | 可变 | 混合模态(例如,文本+图片)文档 |
Agentic Chunking 代理式分块 | 非常高 | 非常高 | 非常高 | 需要深度理解的复杂文档 |
Subdocument Chunking 子文档分块 | 高 | 高 | 高 | 大型文档集合 |
Hybrid Chunking 混合分块 | 可变 | 非常高 | 可变 | 通用系统 |
如何选择合适的分块策略?
选择合适的分块策略需要考虑以下因素:
-
文档类型: 结构化程度、长度、模态。
-
查询复杂度: 简单FAQ还是复杂的技术查询。
-
资源可用性: 计算能力和时间限制。
-
预期结果: 速度、准确率、上下文保留。
以下是一些指导原则:
-
追求速度: 使用固定长度或基于句子的分块。
-
追求上下文: 选择滑动窗口、语义或上下文增强分块。
-
处理混合内容: 采用特定模态或混合分块。
-
大规模系统: 在效率和上下文之间取得平衡,使用递归或子文档分块。
总结:理解各种策略的优缺点和适用场景,可以帮助你根据具体需求定制RAG系统,从而有效地增强语言模型的能力。
记住,没有万能的策略,需要不断尝试和优化,才能找到最适合你的RAG的方案。:))
相关文章:
【RAG】11种Chunking Strategies分块策略介绍和选择
【今日鸡汤】学习之路上,勤奋是比 “聪明” 远远更珍贵的品质。 参考原文地址:https://masteringllm.medium.com/11-chunking-strategies-for-rag-simplified-visualized-df0dbec8e373 在构建强大的检索增强生成(RAG)系统时&…...
中继器:网络中的“血包”与“加时器”
在探讨网络技术时,我们往往会遇到各种专业术语和设备,中继器便是其中之一。然而,对于非技术人员或初学者来说,这些概念可能显得抽象且难以理解。今天,我将通过一个生动的比喻——将中继器比作网络中的“血包”与“加时…...
证明当||x||=1时,Ax=0的最小二乘解是的最小特征值对应的特征向量
问题:证明当||x||1时,Ax0的最小二乘解是的最小特征值对应的特征向量。 证明: 上个命题等同于:的最小特征值所对应的特征向量可使得||Ax||最小。以下分别对x为的特征向量和不为的特征向量这两种情况进行证明。 情况1: 若x为的特征…...
AI大模型学习十八、利用Dify+deepseekR1 +本地部署Stable Diffusion搭建 AI 图片生成应用
一、说明 最近在学习Dify工作流的一些玩法,下面将介绍一下Dify Stable Diffusion实现文生图工作流的应用方法 Dify与Stable Diffusion的协同价值 Dify作为低代码AI开发平台的优势:可视化编排、API快速集成 Stable Diffusion的核心能力:高效…...
linux基础操作4------(权限管理)
一.前言 今天我们来讲讲linux的权限管理,比如文件的权限,如果大家看过前面说的app逆向的frida,我们在手机里要给frida,我们都要设置一下chomd 777 frida ,这样就给了可执行权限,这就是这一章要讲的&#x…...
Linux数据库篇、第零章_MySQL30周年庆典活动
MySQL考试报名网站 Oracle Training and Certification | Oracle 中国 活动时间 2025年 MySQL的30周年庆典将于2025年举行。MySQL于1995年首次发布,因此其30周年纪念日是2025年。为了庆祝这一里程碑,MySQL将提供免费的课程和认证考试,活动…...
HVV面试题汇总合集
应急响应的命令 Linux ps -aux 查看进程 netstat -antlp 查看端口 top查看 cpu使用情况 Windows tasklist 查看进程 netstat -an 查看端口struts2原理特征 原理: 045:默认的content-type解析器会把用户传来的数据直接当成代码执行,造成rce 特征:ognl表达式&…...
Mac下Robotframework + Python3环境搭建
1.安装python3 1.0安装XCODE 1.打开浏览器,登陆苹果开发者网站:https://developer.apple.com/download/more/ 2.登陆你的apple账号,授权访问。 3.查看mac系统版本 需要下载与系统版本对应的Xcode 4.在搜索框中输入: 如果Mac 系统…...
stm32实战项目:无刷驱动
目录 系统时钟配置 PWM模块初始化 ADC模块配置 霍尔接口配置 速度环定时器 换相逻辑实现 主控制循环 系统时钟配置 启用72MHz主频:RCC_Configuration()设置PLL外设时钟使能:TIM1/ADC/GPIO时钟 #include "stm32f10x.h"void RCC_Configu…...
MNIST 手写数字分类
转自我的个人博客: https://shar-pen.github.io/2025/05/04/torch-distributed-series/1.MNIST/ 基础的单卡训练 本笔记本演示了训练一个卷积神经网络(CNN)来对 MNIST 数据集中的手写数字进行分类的过程。工作流程包括: 数据准备ÿ…...
【RuntimeError: Directory ‘static/‘ does not exist 】
背景 File “/root/miniforge3/lib/python3.10/site-packages/starlette/staticfiles.py”, line 56, in init raise RuntimeError(f"Directory ‘{directory}’ does not exist") RuntimeError: Directory ‘static/’ does not exist 运行读取pdf时候,…...
SQL:SELF JOIN(自连接)与CROSS JOIN(交叉连接)
目录 SELF JOIN(自连接) CROSS JOIN(交叉连接 / 笛卡尔积) 示例: SELF JOIN CROSS JOIN 如果没有 DATEDIFF() 函数怎么办? 🔍 SELF JOIN vs CROSS JOIN 对比总结 SELF JOIN(自…...
Linux网络基础 -- 局域网,广域网,网络协议,网络传输的基本流程,端口号,网络字节序
目录 1. 计算机网络背景 1.1 局域网 1.1.2 局域网的组成 1.2 广域网 1.1.2 广域网的组成 2. 初始网络协议 2.1 网络协议的定义和作用 2.2 网络协议的分层结构 2.2.1 OSI七层模型 2.2.2 TCP/IP 五层(四层)模型 3. 再识网络协议 3.1 为什么要有…...
当 Manus AI 遇上 OpenAI Operator,谁能更胜一筹?
自主智能体通过实现任务自动化,改变了我们与技术交互的方式,让我们的生活变得更加便捷。去年,OpenAI 为人工智能聊天机器人引入了定时任务和操作智能体,赋予了其代理功能,而 Anthropic 则在 Claude 上实现了类似的功能…...
iOS实名认证模块的具体实现过程(swift)
实名认证是当前APP的一个基础功能了,今天我集成了实名认证模块在iOS应用中的具体实现步骤,结合技术细节与最佳实践: 一、手机号验证 1. 发送短信验证码 技术实现:// 使用Alamofire调用第三方短信API AF.request("https://s…...
UE5定序器中摇臂挂载摄像机 让摄像机始终朝向目标
1. 搭建摄像机摇臂并加入 Sequencer 在关卡中: Cinematics → Add Level Sequence,新建并打开一个 Level Sequence。 在视口里 右键 → Cinematic → Cine Camera Actor Rig → Crane,放一个 CameraRig_Crane。 默认 Crane 自带一个 CineCa…...
Redis BigKey 问题是什么
BigKey 问题是什么 BigKey 的具体表现是 redis 中的 key 对应的 value 很大,占用的 redis 空间比较大,本质上是大 value 问题。 BigKey怎么找 redis-cli --bigkeysscanBig Key 产生的原因 1.redis数据结构使用不恰当 2.未及时清理垃圾数据 3.对业务预…...
硬件中断请求号和lspci命令查看到的device id有关系吗?
这是我忽然想到的一个人问题 硬件中断请求号(IRQ)与lspci命令查看到的设备ID(Device ID)没有直接对应关系,但两者在系统硬件管理中通过以下方式间接关联: 一、硬件层面的独立标识 Device ID的本质…...
Qt 中 QWidget涉及的常用核心属性介绍
欢迎来到干货小仓库 一匹真正的好马,即使在鞭子的影子下,也能飞奔 1.enabled API说明isEnabled()获取到控件的可用状态setEnabled()设置控件是否可使用.true:可用,false:禁用 禁用:指该控件不能接收任何用…...
编程日志5.3
串的习题 1.Problem - 2030 #include<iostream> using namespace std; int main() { char s[500]; int n; cin >> n; getchar();//去掉空格部分 while (n--) { gets(s);//老式写法 vs显示错误题目解答正确 int cnt 0; …...
sql的性能分析
慢查询日志:通过慢查询日志需要优化的sql语句。 慢查询日志记录了所有执行时间超过指定参数的所有sql语句。 开启慢日志查询开关:show_query_log1 设置慢查询日志的时间:long_query_time?。 show variables like ‘slow_query_log’&…...
JAVA 锁—— synchronized
32 位机器上java对象头中,markWord 示意图如上所示,64 位机器扩展前面标识位数,如 hashcode(25 -> 31),线程ID(23 -> 54) 如果启用了偏向锁: synchronized添加偏向锁:只有1个线程加锁的情况下&#…...
游戏引擎学习第274天:基于弹簧的动态动画
回顾前一天内容,并为今天的工作设定目标 我们昨天展示了一些内容,现在先回顾一下昨天的进展。我们目前正在处理的是角色跳跃的动画——特别是身体部分的跳跃。 现在角色的动画状态如下: 正在实现角色的移动和跳跃。跳跃中已经加入了一些预备…...
【英语笔记(二)】句子成分、基本句型;简单描述十大词类与从句的分类、助动词和非谓语动词的使用
1. 介词 at, in, on 的用法区别 1.1 表示时间的区别 1. 表示时间的某一点、某一时刻或年龄等用 at。如: I get up at six in the morning. 我早上六点钟起床。He got married at the age of 25. 他 25 岁结婚。 2. 泛指一般意义的上午、下午或晚上以及月或年等较…...
TAPIP3D:持久3D几何中跟踪任意点
简述 在视频中跟踪一个点(比如一个物体的某个特定位置)听起来简单,但实际上很复杂,尤其是在3D空间中。传统方法通常在2D图像上跟踪像素,但这忽略了物体的3D几何信息和摄像机的运动,导致跟踪不稳定…...
RabbitMQ的工作队列模式和路由模式有什么区别?
RabbitMQ 的工作队列模式(Work Queues)和路由模式(Routing)是两种不同的消息传递模式,主要区别在于消息的分发逻辑和使用场景。以下是它们的核心差异: 1. 工作队列模式(Work Queues)…...
armv7 backtrace
ref: ARM Cortex-M3/M4/M7 Hardfault异常分析_arm hardfault-CSDN博客...
Python并发编程:开启性能优化的大门(7/10)
1.引言 在当今数字化时代,Python 已成为编程领域中一颗璀璨的明星,占据着编程语言排行榜的榜首。无论是数据科学、人工智能,还是 Web 开发、自动化脚本编写,Python 都以其简洁的语法、丰富的库和强大的功能,赢得了广大…...
泰勒展开式
常用的 泰勒展开式(Taylor series expansion)是指把一个函数在某点的邻域内展开成幂级数的形式。以函数 f ( x ) f(x) f(x) 在点 a a a 处展开为例,其泰勒展开式为: f ( x ) f ( a ) f ′ ( a ) ( x − a ) f ′ ′ ( a ) 2 …...
深入理解 Polly:.NET Core 中的健壮错误处理策略
在现代软件开发中,错误处理是构建高可用、健壮系统的关键之一。尤其是当应用依赖外部服务(如 API、数据库或其他网络资源)时,临时的服务中断、超时或其他不可预见的错误都会影响应用的稳定性。为了提升系统的容错能力,…...
【Bootstrap V4系列】学习入门教程之 组件-巨幕(Jumbotron)和列表组(List group)
Bootstrap V4系列 学习入门教程之 组件-巨幕(Jumbotron)和列表组(List group) 一、巨幕(Jumbotron)1.1 带有圆角1.2 全宽且无圆角 二、列表组(List group)2.1 Basic example2.2 Acti…...
02.three官方示例+编辑器+AI快速学习webgl_animation_skinning_blending
本实例主要讲解内容 这个示例展示了Three.js中骨骼动画混合(Skeletal Animation Blending)的实现方法,通过加载一个士兵模型,演示了如何在不同动画状态(如站立、行走、跑步)之间进行平滑过渡。核心技术包括动画混合器(AnimationM…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1商用服务开通教程以及模型体验
在当今数字化浪潮迅猛推进的时代,云计算与人工智能技术的深度融合正不断催生出众多创新应用与服务,为企业和个人用户带来了前所未有的便利与发展机遇。本文将重点聚焦于在华为云这一行业领先的云计算平台上,对 DeepSeek-V3/R1 商用服务展开的…...
大语言模型通过MCP控制STM32-支持Ollama、DeepSeek、openai等
MCP控制STM32 MCP部分 1.下载源码 git clone https://github.com/ana52070/MCP_Control_STM32.git cd MCP_Control_STM32 cd mcp-led_oled2. 创建并激活虚拟环境 为了避免不同项目之间的依赖冲突,建议使用虚拟环境。根据你的操作系统和 Python 版本,…...
Linux-Ubuntu安装Stable Diffusion Forge
SD Forge在Win上配置起来相对简单且教程丰富,而在Linux平台的配置则稍有门槛且教程较少。本文提供一个基于Ubuntu24.04发行版(对其他Linux以及SD分支亦有参考价值)的Stable Diffusion ForgeUI安装配置教程,希望有所帮助 本教程以N…...
LoRA(Low-Rank Adaptation)原理详解
LoRA(Low-Rank Adaptation)原理详解 LoRA(低秩适应)是一种参数高效微调(Parameter-Efficient Fine-Tuning, PEFT)技术,旨在以极低的参数量实现大模型在特定任务上的高效适配。其核心思想基于低秩分解假设,即模型在适应新任务时,参数更新矩阵具有低秩特性,可用少量参…...
分享一个可以用GPT打标的傻瓜式SD图片打标工具——辣椒炒肉图片打标助手
一、打标效果展示 请参考下图,了解最终的打标效果: 打标速度提升百分之300; 打标成本: gpt4o每百张图约5毛rmb; gpt4o-mini价格更低; 更有claude,grok,gemini,豆包等…...
实战项目2(03)
目录 任务场景一【重点】 【sw1配置】 【sw2配置】 任务场景二【重点】 【sw1配置】 【sw2配置】 【sw3配置】 任务场景一【重点】 掌握基于SVI实现跨VLAN通信——某公司网络为了减少广播包对网络的影响,网络管理员对网络进行了VLAN划分,完成VLA…...
PyCharm软件下载和配置Python解释器
以下是详细的PyCharm下载及解释器环境配置步骤: 有什么问题可以留评论(看见会回复的) 一、PyCharm下载 1. 访问官网 进入JetBrains官网:https://www.jetbrains.com/pycharm/ 2. 选择版本 Community版(免费&…...
《从零构建一个简易的IOC容器,理解Spring的核心思想》
大家好呀!今天我们要一起探索Java开发中最神奇的魔法之一 —— Spring框架的IOC容器!🧙♂️ 我会用最最最简单的方式,让你彻底明白这个看似高深的概念。准备好了吗?Let’s go! 🚀 一、什么是IOC容器&…...
差分与位移算子
差分与位移算子是数值分析和离散数学中处理序列或离散函数的重要工具。它们通过算子代数简化差分的计算和分析,以下是关键概念和关系的总结: 1. 位移算子(Shift Operator) 定义: 位移算子 ( E ) 将函数 ( f(x) ) 沿自变…...
Robot之VideoMimic:《Visual Imitation Enables Contextual Humanoid Control》翻译与解读
Robot之VideoMimic:《Visual Imitation Enables Contextual Humanoid Control》翻译与解读 导读:这篇论文介绍了VIDEOMIMIC,一个基于视觉模仿的真实到模拟到真实流水线,用于训练人形机器人执行上下文相关的全身动作。该方法通过分…...
【Java学习日记34】:this关键字和成员变量
为什么不需要加 this? 作用域规则: Java编译器在查找变量时遵循“就近原则”。 先在当前方法内查找局部变量或参数。 若找不到,则去类的成员变量中查找。 getName() 的上下文: 该方法没有参数或局部变量名为 name,因…...
包名查看器APP:高效管理手机应用的实用工具
包名查看器APP是一款功能强大的文件查看软件,专为安卓用户设计,能够帮助用户快速了解手机上安装和未安装的APK包信息。作为酷安首发的APK信息查看工具,它提供了比系统设置更详细的信息,如版本号、包名、MD5等,帮助用户…...
左右括号的最小处理次数
1、题目描述 多多君在处理一个由左结号(和右语号)组成的字符串,多多君每次处理时可以顺序读取一个字符或者一个有效括号子串,求问多多的最小处理次数。 输入描述: 第一行为一个整数N,表示字符串长度(1<…...
22.第二阶段x64游戏实战-分析周围对象类型
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:21.第二阶段x64游戏实战-分析采集物偏移 上一个内容里发现采集物的名字通过我们…...
【C/C++】无符号调试:GDB解栈实战指南
文章目录 无符号调试:GDB解栈实战指南1 生成并加载 Core Dump2 查看原始堆栈信息(地址形式)3 确认加载的共享库地址范围4 手动转换地址为函数名5 反汇编关键代码段6 加载外部符号文件(如有)7 结合系统库文档分析8 示例…...
梦熊联盟:202505基础语法-题解
202505基础语法-题解 T1 - 九的倍数 解法: 对于 9 的倍数,只需要判定其各位的数码和是否为 9 的倍数即可。 例如判断一个数是不是 9 的倍数,只要判断其各位数字之和是不是 9 的倍数,因为一个数能被 9 整除当且仅当它的各位数字之和…...
Java SE(11)——内部类
1.内部类 定义:Java中的内部类(Inner Class)是指在一个类的内部定义的类。 使用场景:当一个类的内部,存在一个部分需要完成的结构进行描述,而该内部结构只为外部类提供服务,那么这个内部结构就可以使用内部类ÿ…...
优化审核模块响应时间从8s降至1.2s的数据库解决方案
优化审核模块响应时间从8s降至1.2s的数据库解决方案 要优化审核模块的数据库性能,需要从多个层面进行分析和优化。以下是具体的SQL语句设计和优化方案: 1. 分析当前性能瓶颈 首先需要找出慢查询: -- 查看慢查询日志中的审核模块相关查询 …...