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

秋招Day14 - MySQL - 场景题

如何查找一个student表中每个班年龄排名在前两名的所有人?

年龄排名前两名,比如一个班的人中的年龄有19 18 17,19和18是最大的两个年龄,但是会有很多人同岁。

SELECT a.class, a.name, a.ageFROM students AS aWHERE (SELECT COUNT(DISTINCT age)FROM student AS bWHERE b.class = a.class AND b.age > a.age                ) < 2ORDER BY a.class, a.age;

子查询同一个班中的所有大于a.age的年龄数字,如果这个数字小于2,就说明a是可以的

两个表,一个表1000W数据,另一个表只有几千数据,要做一个关联查询,如何优化?

为关联字段建立索引

小表驱动大表:根据小表的字段值,利用大表的索引快速定位数据

对于一个新建表,先插数据还是先建索引效率高?

如果要插入的数据量很大,先插数据再建索引效率高,因为每次插入数据也要同时更新索引,可能会造成频繁的页分裂索引结构调整,引入性能开销

小批量插入可以先建索引

什么是深分页?select * from tbn limit 10000000, 10这个语句有什么问题?

深分页是指随着页号越来越大,比较靠后的页面的offset也随之变大,导致需要从头扫描并跳过的数据行越来越多,有严重的性能问题。

延迟关联:可以先在子查询中借助主键索引查出页面的开头,然后开始查找页面中的元素

或者可以用书签,记住上一次分页的最大主键id

一个学生成绩表,求每个班的前十名

窗口函数ROW_NUMBER()为每一行打编号

PARTITION BY class类似于GROUP BY但是行数不减少

ORDER BY score按照成绩排序

SELECT student_name, class, score, rn
FROM (SELECT student_name, class, score,ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) AS rnFROM student_scores
) AS tmp
WHERE rn <= 10;

相关文章:

  • ps做网站首页效果特效百度推广怎么收费的
  • 服务器架构做网站惠东seo公司
  • 手工外包网青岛seo公司
  • 自然资源网站官网50篇经典软文100字
  • 大连专业模板网站制作网站建设优化收费
  • 专业网站建设推荐西安疫情最新数据消息中高风险地区
  • RabbitMQ 利用死信队列来实现延迟消息
  • Linux Sonic Agent 端部署(详细版)(腾讯云)
  • Google Cloud Platform(GCP)实例中使用显卡信息报错问题
  • 裸机项目添加FreeRTOS操作系统--常见报错
  • Kubernetes生命周期管理:深入理解 Pod 生命周期
  • Aerotech系列(4)Aerotech.A3200名空间
  • SpringBoot + MyBatis 事务管理全解析:从 @Transactional 到 JDBC Connection 的旅程
  • Airtable 的数据超出上限,3 种常见应对方式
  • 较大项目 git(gitee, github) 拉取失败解决方法
  • Linux系统环境编程
  • NHDeep智能档案题名(标题)校对工具使用说明
  • Linux线程概念及常用接口(1)
  • Redis 乱码和LocalDateTime类型缓存问题
  • 电商领域企业级应用后端开发 (Java) 就业前景深度分析报告 (2025-2030)
  • uniapp项目之小兔鲜儿小程序商城(六) 地址模块:地址管理页的实现,地址表单页的实现
  • 随机算法设计思想总结
  • 闲聊ARM内核参数传递机制
  • Harmony状态管理@Event
  • JVM的内存模型和内存结构
  • 【数字后端】- 什么是NDR规则?