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

单表查询-分析函数的应用

1、问题

最近遇到一个有趣的优化问题,本身的需求是统计每个人超过他自己分数的人数,并显示自身分数情况。
于是开发商就把当前的需求直译成如下sql
select a.,(select count(1) from test0824 b where a.score>b.score) as cnt,rownum rn from test0824 a
order by score desc
在这里插入图片描述这样的语句主查询越大,即(test0824表数据量越大)查询越慢,这里相当于每次主查询查出一条数据,就要和子查询比较a.score>b.score,子查询有多少条数据就比较多少次,实际上的效率就是主查询条数
子查询数据量,可以说效率低下
那怎么办呢?

2、需求

这个需求到底是什么意思,实际上就是分数排名,这里我们可以用到rank()over()进行处理

3 、优化改写

select a.*,rank()over(order by score desc)-1 as cnt,rownum rn from test0824 a
order by SCORE asc
在这里插入图片描述
执行时间:
在这里插入图片描述

排完序后减1就是计算超过分数的人数。查询性能提升几倍以上
在这里插入图片描述

4、小结

(1)优化的思路其实就是减少比较次数即扫描表的次数。
(2)当拿到一个需求,应该合理分析需求,寻求更快地效率去实现,而非直译。

http://www.xdnf.cn/news/18762.html

相关文章:

  • 重置MySQL数据库的密码指南(Windows/Linux全适配)
  • 在 Ruby 客户端里用 ES|QL
  • WSL-linux部署IndexTTS 记录(含本地 CUDA/cuDNN 编译依赖说明)
  • 鸿蒙 ArkTS 开发:Number、Boolean、String 三种核心基本数据类型详解(附实战案例)
  • 夜间跌倒检测响应速度↑150%!陌讯多模态骨架追踪算法在智慧养老院的落地实践
  • 手写MyBatis第32弹-设计模式实战:Builder模式在MyBatis框架中的精妙应用
  • Anaconda搭建keras开发环境小记
  • EP01:【DA】数据分析的概述
  • 【LeetCode】分享|如何科学的刷题?
  • 2025年渗透测试面试题总结-31(题目+回答)
  • 基于springboot的高校后勤保修服务系统/基于android的高校后勤保修服务系统app
  • 力扣594:最和谐子序列
  • ViLU: Learning Vision-Language Uncertainties for Failure Prediction
  • Ubuntu 服务器无法 ping 通网站域名的问题解决备忘 ——通常与网络配置有关(DNS解析)
  • 2025年8月第3周AI资讯
  • AI Prompt 的原理与实战
  • assert使用方法
  • 人形机器人——电子皮肤技术路线:光学式电子皮肤及MIT基于光导纤维的分布式触觉传感电子皮肤
  • 基于Spring Cloud与Kafka的支付金融场景面试问答解析
  • Axure RP 9 交互原型设计(Mac 中文)
  • 十、redis 入门 之 redis事务
  • 理想汽车智驾方案介绍 2|MindVLA 方案详解
  • QT-布局管理器
  • 【Docker项目实战】使用Docker部署轻量级LetsMarkdown文本编辑器
  • Java基础第2天总结
  • [两数之和](哈希表做法)
  • 【Python】新手入门:为什么需要类型注解?如何使用Mypy进行静态类型检查?复杂类型注解语法是怎么样的?
  • JH-14回柱绞车优化设计cad+设计说明书+绛重
  • 攻防世界—Confusion1—(模板注入ssti)
  • ADC系统中的信噪比(SNR)