【数据库】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(真实场景题:连续登录、留存率、行列转换等)后续更新,关注不迷路。

相关推荐
BioRunYiXue1 小时前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html
卓豪终端管理1 小时前
300 台终端补丁推送完成 ≠ 漏洞关闭:补丁稽核闭环的状态机与工程落点
网络·数据库·php
l1t2 小时前
DeepSeek总结的PostgreSQL 中的二进制只读副本,第三部分
数据库·postgresql
从零数据分析2 小时前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database
码士集团小青2 小时前
Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
数据库·redis·缓存
太理摆烂哥2 小时前
MySQL的查询
数据库·mysql
码士集团小青2 小时前
硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战
数据库·redis·缓存
hunter_0762 小时前
App 被苹果 4.3 拒绝怎么办?从官方条款到整改、沟通与申诉
面试·代码规范
十年Java程序媛2 小时前
Java 面试常问 this、super:构造方法调用顺序避坑
java·开发语言·spring boot·面试·个人开发