【数据库】SQL进阶15题,窗口函数/索引/事务一页速查

【前言】基础题能答,进阶题才见真章。窗口函数、索引、事务是面试官最爱深挖的三块,也是决定 offer 的分水岭。这篇把板块2的15道进阶必问整理成可背速查,附代码示例与易错点。

一、窗口函数(高频)

1、ROW_NUMBER / RANK / DENSE_RANK 区别:ROW_NUMBER 不并列;RANK 并列但跳号;DENSE_RANK 并列不跳号。示例:SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) FROM emp;

2、PARTITION BY 分组内排名:SELECT dept, name, RANK() OVER (PARTITION BY dept ORDER BY salary DESC) FROM emp;

3、SUM 累加 / 移动平均:SELECT id, amount, SUM(amount) OVER (ORDER BY id) FROM orders;

二、子查询与集合操作

4、子查询:SELECT name FROM emp WHERE salary > (SELECT AVG(salary) FROM emp);

5、EXISTS / NOT EXISTS:比 IN 更高效,命中即停。

6、UNION(去重)vs UNION ALL(不去重,更快)。

7、CASE WHEN:SELECT name, CASE WHEN salary>=10000 THEN 高薪 ELSE 普通 END FROM emp;

三、索引与查询优化

8、索引原理:B+ 树,类似目录,查询从 O(n) 降到 O(log n);代价是占空间、写变慢。

9、覆盖索引 / 最左前缀:联合索引 (a,b,c) 中 a、a+b、a+b+c 能命中,b、c、b+c 不能。

10、EXPLAIN:重点看 type(ALL=全表扫描 > index > range > ref > eq_ref > const)与 rows(扫描行数)。

11、慢查询优化框架:EXPLAIN 看是否全表扫描 → 加索引 → 避免 SELECT * → 避免 WHERE 对列做函数 → 深分页用游标。

四、事务与锁

12、事务 ACID:原子性、一致性、隔离性、持久性。

13、隔离级别:读未提交(脏读)/ 读已提交(不可重复读)/ 可重复读(幻读,MySQL默认)/ 串行化。

14、死锁:两事务互持对方资源。解决:超时回滚、合理加锁顺序、缩小事务范围。

15、锁:行锁、表锁、乐观锁(版本号)、悲观锁(SELECT...FOR UPDATE)。

【结语】板块2是进阶核心,板块3(真实场景题:连续登录、留存率、行列转换等)后续更新,关注不迷路。

相关推荐
星恒随风2 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
§ꦿCFོ༉4 小时前
嵌入式八股文—C语言入门学习(四)
c语言·开发语言·学习
吴名氏.4 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent
爱码少年5 小时前
Springboot下如何将CSV文件数据导入H2、Mysql数据库表
数据库·mysql·csv
2603_969694855 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
可乐ea6 小时前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
数据技术说7 小时前
在 KES AI 数据库上搭一条 NL2SQL 链路:语义、召回、权限各放哪
人工智能·sql·代码规范
阿义有问题7 小时前
MySQL 迁移达梦全流程实战:DTS 七步图解 + 对象名全大写适配(附踩坑清单)
数据库
聪明的笨猪猪8 小时前
企业知识库AI架构选型:落地导向的架构决策与组件清单
经验分享·面试·架构·embedding·数据库架构
猫猫不是喵喵.9 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节