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

数据库表的性能优化过程

问题背景做一个数据库表查看、标注与分析的工具软件。是数据库中表的信息information_schema.tables是的数据字典文档存储在本地文件中是对的额外标注信息存储在另一个数据库中。每一条最多关联到一条和一条。现在想搜索。前端向后端提供3个参数搜索关键词列表、当前页码、每页条数后端的搜索逻辑是如果一条完整数据包含所有搜索关键词则将加入搜索结果中。的数量目前为6000要做到秒级搜索。初步实现因为跨数据源所以不能简单连表查询。对于每个查出、然后将、、中要搜索的字段值取出来用空格隔开拼接为字符串形如Table字段值 Documentation字段值 Annotation字段值我们称之为搜索键。如果每个关键词都包含在中则将加入搜索结果。搜索时先获取所有然后遍历每个获取并判断是否加入搜索结果。为了提高速度用Redis缓存对应的。分析数据情况只增、不删、不改因此搜索时要重新获取所有确保搜索到新不必考虑驱逐evict的缓存。不增、不删、不改因此不必考虑驱逐的缓存。增、删、改因此要在增删改之后驱逐对应的缓存确保搜索到的最新信息。实测结果实现了功能支持同时按、、的字段搜索。有性能问题即使缓存已经全部完成但每次搜索都要耗时30s左右原因是6000个遍历从Redis获取每次耗时1~15ms累计耗时非常长。第一次性能优化优化缓存策略。获取所有后构建→然后将缓存这样下一次搜索时只需要从Redis获取一次提高传输效率。为了确保搜索到新缓存时将列表的长度作为缓存键如果新增了则不会命中缓存而是重新构建。为了减少构建的时间仍然保留单个的缓存仍然在增删改之后驱逐单个的缓存但不同的是还要同时驱逐的缓存。实测结果性能提升明显在缓存全部完成的情况下搜索耗时降至1.3s左右。仍然有性能问题对一个做了增删改会驱逐整个缓存重建就又回到了遍历的情况仍然要耗时30s左右。第二次性能优化优化缓存策略。取消单个的缓存只缓存。搜索时要获取。先获取现有的缓存固定缓存键不再使用列表长度作为缓存键没有缓存则取得空Map然后遍历如果不在中则计算并放入。这样第一次搜索时会计算每个的后续搜索就只需要计算新的。增删改后要更新。先获取现有的缓存然后重新计算指定的并放入。这样无需每次都重建整个。实测结果增删改后再搜索耗时降至1.3s左右。第三次性能优化优化缓存实现方式。既然现在只需要简单地缓存一个那么不一定要用Redis。使用Redis作为缓存RedisCacheManager虽然内网通信快但仍有网络开销。实测平均1092.9ms。使用Map作为缓存ConcurrentMapCacheManager其他代码完全不变。实测平均968.3ms。修改代码直接用类中的Map字段作为缓存省去缓存管理器的开销。实测平均915.2ms。可见性能有提升但幅度不大。由于软件在开发中要频繁重新运行Redis能保持缓存Map不能因此保持上一版方案不做修改。第四次性能优化第三次优化其实是盲目的应该要用事实找出性能瓶颈。对搜索过程计时分析发现一次耗时1105ms的搜索其中获取所有耗时1028ms占比93%是绝对的性能瓶颈。思路1先只获取所有表名而不是对象如果表名对应的匹配再获取。实测发现如果匹配的表名很多例如关键词列表为空时则即使有表名→的缓存Redis实现逐个获取也远远慢于直接从数据库一次性获取。因此此思路不可行。思路2只增、不删、不改因此可以考虑增量获取。缓存列表每次获取时跳过缓存的长度只获取增量部分。然而information_schema.tables中没有id无法保证新一定排在最后。因此此思路不可行。思路3获取所有说到底只是为了搜索到新如果能知道什么时候新增了就可以放心地使用列表的缓存或者从数据库重新获取。那么怎么知道由于只增所以可以用的数量判断。缓存列表每次先从数据库查出数量比直接查出列表明显更快如果数量与缓存一致则用缓存否则查库。实测此思路可行。实现思路3后再次计时分析。无新增时搜索耗时降至360ms左右只查库数量有新增时耗时升至1.5s左右查库数量列表。由于搜索的频率远远高于新增因此总体性能提升显著。总结经过数次性能优化在满足功能的前提下搜索时间从30s左右降至稳定0.4s左右效果显著。0.4s已经没有缓慢感性能优化工作可以结束了。从上述优化过程可见做优化要因地制宜具体问题具体分析选择合适的策略优化效果的衡量要以实测结果为准。

相关文章:

数据库表的性能优化过程

问题背景做一个数据库表查看、标注与分析的工具软件。是数据库中表的信息(information_schema.tables);是的数据字典文档,存储在本地文件中;是对的额外标注信息,存储在另一个数据库中。每一条,最…...

新手福音:通过快马平台零代码基础理解qun329群聊应用开发

作为一个刚接触编程的新手,想要理解群聊应用开发确实容易一头雾水。最近我在尝试用InsCode(快马)平台搭建类似qun329的简单群聊网页时,发现整个过程比想象中简单很多。下面分享我的学习过程,希望能帮到同样零基础的朋友。 项目结构规划 首先明…...

从Java全栈工程师视角看Web开发的实战与思考

从Java全栈工程师视角看Web开发的实战与思考 面试现场:一次真实的技术对话 面试官:你好,我是今天的面试官,很高兴见到你。请先简单介绍一下自己。 应聘者:你好,我叫李明,28岁,本科学…...

OpenClaw+Qwen2.5-VL-7B省钱方案:自建多模态接口替代GPT-4V

OpenClawQwen2.5-VL-7B省钱方案:自建多模态接口替代GPT-4V 1. 为什么选择本地多模态方案 去年我在开发一个智能内容管理工具时,频繁调用GPT-4V处理截图和文档解析,每月账单轻松突破2000元。最痛心的是,80%的简单图片识别任务其实…...

OpenClaw多模态技能库:Qwen3.5-9B-AWQ-4bit实现10种图片处理场景

OpenClaw多模态技能库:Qwen3.5-9B-AWQ-4bit实现10种图片处理场景 1. 为什么需要多模态技能库? 去年我接手了一个个人项目,需要批量处理几百张产品照片。手动用PS抠图、调色、加文字,花了两周才完成。当时就想:如果能…...

企业级离线OCR深度解析:5大策略实现高性能文字识别

企业级离线OCR深度解析:5大策略实现高性能文字识别 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…...

OpenClaw小团队协作:千问3.5-35B-A3B-FP8共享技能库搭建

OpenClaw小团队协作:千问3.5-35B-A3B-FP8共享技能库搭建 1. 为什么我们需要共享技能库 去年冬天,我们团队在尝试用OpenClaw自动化周报生成时遇到了一个典型问题——每个人都在重复造轮子。小王写了个飞书日程抓取脚本,小李开发了Git提交记录…...

济南精神心理专科:如何识别躯体化障碍的早期信号

济南躯体化障碍疾病就医选择难题在济南,面对躯体化障碍疾病的朋友最关心的是隐私和靠谱。选择一家好的医院至关重要,尤其是看躯体化障碍一定要选专科专业医院。这类医院不仅在专业诊疗上更有优势,还能提供更好的隐私保护和服务体验。本文将基…...

多模态场景:头巾误判为厨师帽 — 问题分析与调优指南

多模态场景:头巾误判为厨师帽 — 问题分析与调优指南适用对象:使用 Qwen-VL 等多模态大模型做「厨师帽 / 头饰」相关识别时的面试问答、方案设计与落地调优参考。1. 问题本质:为什么会把头巾当成厨师帽 这通常不是「模型坏了」,而…...

高效大麦抢票自动化工具实战指南:开源项目的专业配置教程

高效大麦抢票自动化工具实战指南:开源项目的专业配置教程 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 大麦网作为国内领先的演出票务…...

win11操作系统

‌电脑显卡 是否是DirectX12 使用 DirectX 诊断工具(dxdiag)‌ 按下 Win R,输入 dxdiag, win 11 安装电脑配置要求: 核心硬件配置 处理器‌:1 GHz 或更快的兼容 64 位处理器(双核心或多核心…...

OpenClaw学术助手:Qwen2.5-VL-7B自动解析论文图表数据

OpenClaw学术助手:Qwen2.5-VL-7B自动解析论文图表数据 1. 为什么需要自动化论文图表解析 作为一名经常需要阅读大量学术论文的研究者,我发现自己花费了太多时间在手动转录图表数据上。每当遇到一篇包含复杂实验数据的论文,就需要对着PDF截图…...

无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...

无片外电容LDO电路设计 完整IP现成电路,具有过温保护和过流保护,带隙,BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记,适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...

OpenClaw定时任务管理:千问3.5-27B驱动日报自动生成

OpenClaw定时任务管理:千问3.5-27B驱动日报自动生成 1. 为什么需要自动化日报 每周五下午,我都会陷入一种"汇报焦虑"——要手动整理GitHub提交记录、汇总JIRA任务进度、编写本周技术总结。这个过程通常要花费1-2小时,而且内容模板…...

OpenClaw数据清洗:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF处理混乱CSV文件

OpenClaw数据清洗:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF处理混乱CSV文件 1. 为什么需要自动化数据清洗 上周我接手了一个市场调研项目,客户发来的CSV文件打开就让我头皮发麻——编码混乱、字段名全是大写拼音缩写、日期格式五花八门。手动…...

AI合规 I 算法备案、大模型备案和登记的区别,双备案又是什么?

开头附上完整阅读链接:AI合规 I 算法备案、大模型备案和登记的区别,双备案又是什么?https://mp.weixin.qq.com/s/QjjnWhbeDvPGduz31O49dQ 公司马上要上线一个新的AI产品,但是突然发现:"我好像需要做备案&#xf…...

Simulink双矢量MPC实战:从郭磊磊论文到可运行的Matlab Function代码(调制模型预测控制详解)

Simulink双矢量MPC实战:从理论到代码的完整实现路径 当我在实验室第一次尝试复现郭磊磊老师那篇经典论文时,面对12种矢量组合和复杂的PWM生成逻辑,完全不知从何下手。经过三个月的反复试验和代码调试,终于摸清了从论文公式到可运行…...

小白必看:霜儿-汉服-造相Z-Turbo从部署到出图全流程解析

小白必看:霜儿-汉服-造相Z-Turbo从部署到出图全流程解析 1. 镜像简介与核心优势 霜儿-汉服-造相Z-Turbo是一款专为汉服写真生成优化的AI模型镜像,基于Xinference框架部署,通过Gradio提供简洁易用的Web界面。与通用文生图模型相比&#xff0…...

3分钟终极指南:如何永久冻结IDM试用期实现免费使用

3分钟终极指南:如何永久冻结IDM试用期实现免费使用 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script Internet Download Manager(IDM&#…...

别再重装系统了!用GParted给Ubuntu 20.04根目录无损扩容(Win11+Ubuntu双系统适用)

双系统用户必备:Ubuntu根目录无损扩容实战指南 1. 当根目录空间告急时 作为一名长期使用Win11Ubuntu双系统的开发者,我深刻理解那种看着根目录空间一点点被蚕食的焦虑。特别是进行深度学习训练或大型项目编译时,几十GB的空间转眼间就被占满。…...

RT thread—iic—at24c04读写操作

at24c04介绍:存储容量:4 Kbits(即 512 字节)。内部结构为 32 页,每页 16 字节。地址0x000-0x1FF通信接口:标准 I2C(时钟线 SCL 和数据线 SDA),支持最高 400 kHz 的快速模…...

AI辅助开发:描述需求,快马AI自动生成旅行商问题算法与可视化

最近在做一个旅行商问题(TSP)的算法项目,想试试用AI辅助开发能有多高效。结果发现InsCode(快马)平台的AI功能真的帮了大忙,整个过程特别顺畅。这里分享一下我的体验。 需求分析阶段 刚开始我只是简单描述了需求:"需要一个用模拟退火算…...

OpenClaw学习助手方案:Qwen2.5-VL-7B解析教材插图生成记忆卡片

OpenClaw学习助手方案:Qwen2.5-VL-7B解析教材插图生成记忆卡片 1. 为什么需要AI辅助学习工具 去年备考专业认证时,我发现自己总在重复低效的学习循环——花大量时间手动整理教材图表中的关键数据,再誊写到Anki卡片上。这种机械劳动不仅耗时…...

leetcode 1550. 存在连续三个奇数的数组-耗时100-Three Consecutive Odds

Problem: 1550. 存在连续三个奇数的数组-耗时100-Three Consecutive Odds 耗时100%&#xff0c;检查连续的三个数字是否奇数 Code class Solution { public:bool threeConsecutiveOdds(vector<int>& arr) {int n arr.size();for(int i 0; i < n - 2; i) {if((a…...

告别传统方法:LogAnomaly如何用NLP技术提升日志异常检测准确率?

告别传统方法&#xff1a;LogAnomaly如何用NLP技术重构日志异常检测范式&#xff1f; 日志数据如同数字世界的神经系统&#xff0c;记录着系统运行的每一次"心跳"与"呼吸"。传统检测方法就像拿着放大镜寻找心电图异常&#xff0c;而LogAnomaly则带来了全新…...

就dddcddddd

dianjiaodud1u...

【Polars 2.0企业级数据清洗黄金法则】:5大生产环境避坑指南+实测性能提升3.7倍基准报告

第一章&#xff1a;Polars 2.0企业级数据清洗黄金法则总览Polars 2.0 以零拷贝语义、并行执行引擎与原生 Arrow 内存布局为核心&#xff0c;重构了企业级数据清洗的性能边界与工程可靠性。其惰性 API 与 eager 模式无缝协同&#xff0c;使复杂清洗流水线既可交互调试&#xff0…...

Shell编程避坑指南:为什么你的while循环总出问题?7个常见错误排查

Shell编程避坑指南&#xff1a;为什么你的while循环总出问题&#xff1f;7个常见错误排查 在Shell脚本开发中&#xff0c;while循环是处理未知迭代次数的利器&#xff0c;但也是错误的高发区。很多开发者在使用while时经常遇到脚本卡死、逻辑异常或结果不符合预期等问题。本文将…...

F5 big IP DNS 导出cname txt记录

DNS上的A记录配置与cname不在同一文件中 cname和txt这一类的在下面这个目录 /var/named/config/namedb可以通过winscp连接DNS后&#xff0c;找到这个目录&#xff0c;里面的所有文件即是&#xff0c;之所以有多个文件&#xff0c;是因为每1个权威域都对应1个独立文件...

不露脸也能当主播?一文了解VTuber

不露脸也能当主播&#xff1f;一文了解VTuber很多人提到 VTuber&#xff0c;脑子里就是“二次元纸片人”在直播间卖萌。 但其实&#xff0c;你每天换的微信头像、用过的苹果拟我表情&#xff0c;短视频平台的3D头套全都是它的“远房亲戚”。 今天我们就把这层科技外衣扒开&…...