排序与Top-N查询优化——排行榜场景下的执行计划、索引设计与性能实验
文章目录每日一句正能量1. 背景与问题2. 环境与数据3. 复现过程3.1 无索引情况下3.2 Top-N并不等于少量计算4. 方案实施4.1 建立排序方向匹配的索引4.2 联合条件下设计复合索引4.3 Top-N排序与内存4.4 参数调整5. 结果对比5.1 执行计划验证清单优化前优化后6. 风险与复盘风险一索引过多风险二排序字段频繁变化风险三分页深度问题风险四回退方案总结附录实验SQL每日一句正能量“最深的期待不是填满而是在心里精心留白。”我们常以为期待是渴望某种到来最深的那种是为未知留下神圣的空隙。像国画的留白不画满反而让山水有了呼吸。心里有白万物才能涌入。1. 背景与问题排行榜是互联网系统中最典型的Top-N业务例如商品销量Top100用户积分排名游戏战力榜新闻热榜风控规则排序。业务通常写成SELECTuser_id,scoreFROMuser_scoreORDERBYscoreDESCLIMIT100;很多开发人员认为只返回100行所以SQL一定很快。实际情况并非如此。如果没有合适索引数据库可能执行全表扫描 ↓ 读取百万行 ↓ 完整排序 ↓ 取前100真正消耗时间的是排序的数据量而不是最终返回的数据量Top-N优化核心目标让数据库尽可能早知道哪些数据排在前面而不是先把所有数据排序完成。2. 环境与数据测试环境KingbaseES 表 user_score 数据量 5000万行 字段 user_id score create_time status初始化CREATETABLEuser_score(user_idBIGINTPRIMARYKEY,scoreINTEGER,create_timeTIMESTAMP,statusINTEGER);排行榜查询SELECTuser_id,scoreFROMuser_scoreWHEREstatus1ORDERBYscoreDESCLIMIT100;重点观察Sort节点 执行时间 Buffers 临时文件3. 复现过程3.1 无索引情况下执行计划可能类似Limit | Sort | Seq Scan user_score问题Seq Scan读取5000万行 Sort处理大量数据 Limit最后才生效如果排序空间不足内存排序 ↓ 临时文件 ↓ 磁盘排序性能进一步下降。需要关注Sort Method Disk Usage Buffers read3.2 Top-N并不等于少量计算例如ORDERBYscoreDESCLIMIT10数据库仍然需要回答谁是最高的10个人如果不知道score顺序只能扫描更多数据。因此返回10行 ≠ 只处理10行4. 方案实施4.1 建立排序方向匹配的索引排行榜核心索引CREATEINDEXidx_score_rankONuser_score(scoreDESC);再次执行EXPLAINANALYZESELECTuser_id,scoreFROMuser_scoreWHEREstatus1ORDERBYscoreDESCLIMIT100;理想计划Limit | Index Scan变化原扫描5000万 排序5000万后沿索引读取前100附近数据4.2 联合条件下设计复合索引实际排行榜通常有过滤条件WHEREstatus1ORDERBYscoreDESCLIMIT100如果只有score索引数据库可能仍需要过滤大量无效行。更合理CREATEINDEXidx_status_scoreONuser_score(status,scoreDESC);原因索引顺序status分组 score排序可以减少扫描范围。4.3 Top-N排序与内存当无法完全利用索引时数据库可能使用Top-N Heap而不是完整排序。完整排序5000万行全部排序Top-N维护当前最大的100行内存压力明显下降。但注意如果N变大LIMIT1000000Top-N优势会下降。4.4 参数调整排序相关参数需要结合业务关注work_mem maintenance_work_mem 临时文件大小提高排序内存可能减少磁盘落盘。但是并发环境下单SQL排序内存 × 并发连接数可能造成内存压力。因此不能简单调大。5. 结果对比测试示例方案执行计划P95Buffer Read无索引Seq Scan Sort18s大量Top-N优化Top-N Heap6s降低排序索引Index Scan Limit120ms极低示例结果说明真正有效的优化通常来自减少排序输入而不是5.1 执行计划验证清单每次优化后保存EXPLAINANALYZE重点比较优化前Sort actual rows50000000优化后Index Scan actual rows≈100观察Execution Time Buffers Sort Method6. 风险与复盘风险一索引过多排行榜索引提升读取但是增加INSERT成本 UPDATE成本 存储空间需要评估写入压力。风险二排序字段频繁变化例如实时积分榜每秒大量更新score。索引维护成本可能明显增加。可考虑缓存排行榜定时汇总表异步计算。风险三分页深度问题很多系统LIMIT100OFFSET1000000会导致大量跳过。优化方式使用Keyset PaginationWHEREscore:last_scoreORDERBYscoreDESCLIMIT100避免深分页扫描。风险四回退方案上线索引优化前保存原SQL保存原执行计划新索引灰度观察P95/P99异常删除索引或恢复SQL。不要只看单次SQL耗时还要看整体吞吐 CPU IO 锁等待总结Top-N查询优化的核心不是“让排序更快”而是减少需要排序的数据最佳实践执行计划分析 ↓ 确认Sort瓶颈 ↓ 设计匹配索引 ↓ 验证Index Scan ↓ 监控并发影响 ↓ 准备回退方案排行榜场景中一个正确设计的排序索引往往可以让几十秒级查询降低到毫秒级。附录实验SQLEXPLAINANALYZESELECTuser_id,scoreFROMuser_scoreWHEREstatus1ORDERBYscoreDESCLIMIT100;CREATEINDEXidx_status_scoreONuser_score(status,scoreDESC);ANALYZEuser_score;转载自https://blog.csdn.net/u014727709/article/details/163863497欢迎 点赞✍评论⭐收藏欢迎指正

相关新闻

angular学习总结(速成版)

angular学习总结(速成版)

1.安装angular&#xff0c;创建项目目录2.3.4.5.6.语法条件渲染&#xff0c;文本渲染列表渲染&#xff0c;事件绑定&#xff0c;类与样式表单绑定表单绑定管道&#xff0c;标签引用7.最终代码html<h1>angular</h1> <p>时间&#xff1a;{{d}}</p> <p…

2026/8/23 20:19:49 阅读更多 →
数学建模实战:从跳台跳水体型校正问题解析工程思维与模型构建

数学建模实战:从跳台跳水体型校正问题解析工程思维与模型构建

1. 项目概述&#xff1a;从一道赛题到一套方法论那年打开“华为杯”赛题包&#xff0c;看到A题《跳台跳水体型校正系数的建模分析》时&#xff0c;我第一反应是这题出得真“刁钻”。它巧妙地把一个大众熟悉的体育项目&#xff0c;包装成了一个典型的、开放性的工业级数学建模问…

2026/8/23 20:22:27 阅读更多 →
ChinaJoy技术观察:从游戏展到数字内容产业技术生态接口

ChinaJoy技术观察:从游戏展到数字内容产业技术生态接口

最近在整理行业观察时&#xff0c;一个反复被提及的问题引起了我的思考&#xff1a;当我们在谈论ChinaJoy时&#xff0c;我们究竟在谈论什么&#xff1f;是那个曾经以游戏试玩、ShowGirl和硬件外设为核心的“游戏展”吗&#xff1f;经过对近期行业动态的梳理&#xff0c;特别是…

2026/8/22 17:01:51 阅读更多 →

最新新闻

UE C++定时器从蓝图到代码:核心机制与实战避坑指南

UE C++定时器从蓝图到代码:核心机制与实战避坑指南

如果你在虚幻引擎&#xff08;UE&#xff09;中已经习惯了用蓝图拖拽节点来实现一个简单的“延迟后执行”或“每隔X秒执行一次”的功能&#xff0c;那么当你第一次尝试在C中实现同样的定时器逻辑时&#xff0c;可能会感到一阵迷茫。蓝图里&#xff0c;一个“Delay”节点或“Set…

2026/8/24 3:05:00 阅读更多 →
Java程序员金九银十涨薪50%:AI时代技术突破与面试实战指南

Java程序员金九银十涨薪50%:AI时代技术突破与面试实战指南

这次我们来看一个对 Java 程序员特别重要的主题&#xff1a;在 AI 技术快速发展的背景下&#xff0c;如何通过系统化的技术准备实现职业突破&#xff0c;特别是在金九银十这样的关键跳槽季获得涨薪 50% 的机会。这个主题的核心不是空谈概念&#xff0c;而是提供一套可落地的技术…

2026/8/24 3:05:00 阅读更多 →
零代码构建AI学习伙伴:从概念到实践的全流程指南

零代码构建AI学习伙伴:从概念到实践的全流程指南

你是否曾想过&#xff0c;拥有一个24小时在线的专属学习伙伴&#xff1f;它能根据你的学习目标&#xff0c;自动规划路径、整理资料、答疑解惑&#xff0c;甚至在你分心时温柔提醒。这听起来像是科幻电影里的情节&#xff0c;但今天&#xff0c;借助AI Agent技术&#xff0c;我…

2026/8/24 3:05:00 阅读更多 →
Ansys Speos材料库:光学仿真效率提升与标准化管理实践

Ansys Speos材料库:光学仿真效率提升与标准化管理实践

1. 项目概述&#xff1a;为什么材料库是Speos仿真的效率引擎&#xff1f; 在光学仿真领域&#xff0c;尤其是使用Ansys Speos进行照明、背光、HUD或摄像头成像分析时&#xff0c;最耗时、最容易出错的环节往往不是几何建模&#xff0c;也不是网格划分&#xff0c;而是材料属性的…

2026/8/24 3:05:00 阅读更多 →
深入解析色彩空间:从sRGB、Linear RGB到XYZ的转换原理与应用

深入解析色彩空间:从sRGB、Linear RGB到XYZ的转换原理与应用

1. 色彩空间漫谈&#xff1a;从显示器到人眼感知搞图形、图像处理或者计算机视觉的朋友&#xff0c;肯定绕不开色彩空间这个概念。你辛辛苦苦调好的颜色&#xff0c;换个设备看就完全不是那个味儿了&#xff1b;你写的着色器&#xff0c;颜色混合结果总感觉不对劲&#xff0c;像…

2026/8/24 3:05:00 阅读更多 →
修改word文档最后修改者怎么改?本地安全修改最后保存者教程

修改word文档最后修改者怎么改?本地安全修改最后保存者教程

技术背景与需求分析 在 Windows 生态下&#xff0c;Office 文档&#xff08;.docx / .xlsx / .pptx&#xff09;之所以能承载“作者”、“最后保存者”等属性&#xff0c;核心在于其采用了 OPC (Open Packaging Conventions) 协议。 针对 修改word文档最后修改者怎么改 这一需…

2026/8/24 3:04:00 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力&#xff1b;确需渲染 HTML 时&#xff0c;先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述&#xff1a;Windows登录密码的“黑匣子”每次你按下CtrlAltDel&#xff0c;输入密码&#xff0c;然后看到那个熟悉的桌面&#xff0c;这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者&#xff0c;我经常被问到&#xff1a;“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述&#xff1a;AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时&#xff0c;遇到一个典型案例&#xff1a;候选人在视频面试中无意提到竞争对手产品名称&#xff0c;系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →