分页、CTE 与结果集运算

共 40 题
#

1. LIMIT/OFFSET 的语义,跳过 N 行取 M 行的代价?

A OFFSET 越大代价越高 ✓ 正确答案
B 跳过 N 行免费
C 与扫描无关
D 深分页无问题
#

2. MySQL 中 LIMIT 的优化,优化器在大 LIMIT 时可能选择全表扫描?

A 总是走索引
B 大 LIMIT 可能选全表扫描 ✓ 正确答案
C 与优化器无关
D 无影响
#

3. PostgreSQL 中 OFFSET 的实现,执行器仍需扫描所有跳过的行?

A 直接跳过不扫描
B 免费
C 与执行器无关
D 仍扫描跳过行 ✓ 正确答案
#

4. SQL Server 的 OFFSET ... FETCH NEXT 的语法?

A 用 LIMIT
B 用 OFFSET...FETCH NEXT ✓ 正确答案
C 与 ORDER BY 无关
D 无语法
#

5. Seek 分页(Keyset Pagination)的实现,WHERE (created_at, id) > (?, ?) ORDER BY created_at, id LIMIT ?

A 用游标条件避免 OFFSET ✓ 正确答案
B 依赖 OFFSET
C 扫描全表
D 需重复排序
#

6. 深分页的优化方案,基于游标、基于 ID 范围、基于二级索引?

A 用 OFFSET 更优
B 用游标避免 OFFSET 扫描 ✓ 正确答案
C 无法优化
D 与索引无关
#

7. 深分页(Deep Pagination)的性能问题,OFFSET 1000000 时的全表扫描?

A 深分页无问题
B OFFSET 大导致扫描多行 ✓ 正确答案
C 与 OFFSET 无关
D 免费
#

8. MySQL 中 LIMIT 与索引的协同?

A 索引可加速 LIMIT 排序 ✓ 正确答案
B 总需排序
C 与索引无关
D 索引无帮助
#

9. 延迟关联(Deferred Join)的深分页优化?

A 与索引无关
B 直接全表
C 无优化
D 先取主键再回表 ✓ 正确答案
#

10. LIMIT 10 OFFSET 20 的语义?

A 返回第 1-10 行
B 跳过 10 行
C 返回第 20-30 行
D 返回第 21-30 行 ✓ 正确答案
#

11. PageHelper 等分页插件的实现原理?

A 不做 SQL 改写
B 仅手动分页
C 拦截并改写 SQL 加分页 ✓ 正确答案
D 与拦截器无关
#

12. 分页缓存(Page Cache)的设计?

A 缓存常用页减少查询 ✓ 正确答案
B 与一致性无关
C 无法缓存
D 无需失效
#

13. 深分页的近似方案(next cursor)?

A 记录上次位置取下一页 ✓ 正确答案
B 用 OFFSET
C 与位置无关
D 无法实现
#

14. UNION ALL 的去重由后续 SELECT DISTINCT 处理时的取舍?

A 自动去重
B 不去重 ✓ 正确答案
C 与 UNION 相同
D 有去重开销
#

15. UNION 与 JOIN 的根本差异,纵向(行)vs 横向(列)?

A JOIN 纵向合并
B 两者相同
C UNION 纵向合并 ✓ 正确答案
D UNION 横向
#

16. 集合运算的 ORDER BY 应用,只能在最后一个 SELECT 后写?

A 每个分支可写
B 不能排序
C 只能写在最后 ✓ 正确答案
D 位置任意
#

17. PostgreSQL 的 INTERSECT ALL、EXCEPT ALL 语义?

A 与 INTERSECT 相同
B 去重
C 保留重复 ✓ 正确答案
D 无此语法
#

18. PostgreSQL 中 INTERSECT 与 EXISTS 的等价?

A 完全等价
B 某些场景等价 ✓ 正确答案
C 无关
D 无法转换
#

19. UNION ALL 与 CTE 的性能对比?

A UNION ALL 总是慢
B CTE 总是快
C 无法比较
D 取决于 CTE 是否物化 ✓ 正确答案
#

20. UNION 的列名采用第一个 SELECT 的列名?

A 采用最后一个
B 无列名
C 取并集
D 采用第一个 SELECT 的列名 ✓ 正确答案
#

21. CTE 中能否 INSERT/UPDATE/DELETE(数据修改 CTE)?

A 与 RETURNING 无关
B MySQL 支持
C 都不支持
D PostgreSQL 支持 ✓ 正确答案
#

22. 多个 CTE 的链式依赖,WITH cte1 AS (...),cte2 AS (SELECT FROM cte1)?

A 只能独立
B 后引用前 ✓ 正确答案
C 不能引用
D 顺序无关
#

23. CTE 与临时视图(VIEW)的差异?

A CTE 持久化
B CTE 仅单语句有效 ✓ 正确答案
C VIEW 语句内有效
D 两者相同
#

24. CTE 在 OLAP 中的应用(多步聚合)?

A 用于多步聚合 ✓ 正确答案
B 无法用
C 与聚合无关
D 只读单表
#

25. CTE 在 PostgreSQL 函数中的可见性?

A 作用域为所在语句 ✓ 正确答案
B 可跨语句
C 函数内不可用
D 全局可见
#

26. CTE 在 SQL Server 中的实现差异?

A 不支持递归
B 支持递归 CTE ✓ 正确答案
C 与 MySQL 相同
D 无 CTE
#

27. CTE 的 AS MATERIALIZED 与 AS NOT MATERIALIZED(PG 12+)?

A 无法控制
B 只内联
C 可强制 MATERIALIZED ✓ 正确答案
D 与物化无关
#

28. CTE 的别名能否在 SELECT 中引用?

A 可在主查询引用 ✓ 正确答案
B 仅定义处
C 与别名无关
D 不能引用
#

29. WITH ... INSERT ... 的数据修改 CTE?

A 可配合 RETURNING ✓ 正确答案
B 不能插入
C 与 CTE 无关
D 仅 MySQL
#

30. Oracle 的 ROWNUM 与 FETCH FIRST n ROWS ONLY 的差异?

A FETCH FIRST 是 Oracle 旧语法
B ROWNUM 可任意比较
C 两者相同
D ROWNUM 是伪列 ✓ 正确答案
#

31. EXCEPT(MINUS)的语义,左表有但右表无的行?

A 返回左有右无的行 ✓ 正确答案
B Oracle 用 EXCEPT
C 返回交集
D 返回并集
#

32. INTERSECT 的语义与实现,Hash Intersection、Sort-based Intersection?

A 可用哈希交集 ✓ 正确答案
B 无实现
C 与算法无关
D 只有一种算法
#

33. UNION 的列兼容性规则,列数必须相同,类型必须兼容?

A 列数必须相同 ✓ 正确答案
B 列数可不同
C 类型不可兼容
D 无要求
#

34. INTERSECT 与 DISTINCT 的差异?

A DISTINCT 是集合运算
B 两者相同
C INTERSECT 隐含去重 ✓ 正确答案
D 无关
#

35. MySQL 8.0.31 之前没有原生 EXCEPT/INTERSECT,如何用 NOT IN/NOT EXISTS/LEFT JOIN 模拟?各有何 NULL 陷阱?

A 可用 NOT EXISTS 模拟 ✓ 正确答案
B 8.0.31 前原生支持
C NOT IN 无 NULL 陷阱
D 无法模拟
#

36. LIMIT 0 的用途(仅返回结构)?

A 返回全表
B 返回空结果保留结构 ✓ 正确答案
C 无用途
D 报错
#

37. count(*) 总数与分页的取舍?

A 总是快
B count 免费
C 与分页无关
D 大表 count 代价高 ✓ 正确答案
#

38. 分页查询的 ORDER BY 必要性?

A 无需排序
B 必须排序保证稳定 ✓ 正确答案
C 顺序无关
D 排序报错
#

39. UNION ALL 在分库分表的应用?

A 合并各分片结果 ✓ 正确答案
B 无法用于分片
C 去重合并
D 与分片无关
#

40. UNION 与 UNION ALL 中 NULL 的处理,UNION 去重时 NULL 如何合并,结果列类型推导的规则,跨库/异构数据源时 NULL 语义如何保持一致?

A UNION ALL 合并 NULL
B UNION 去重时多个 NULL 合并 ✓ 正确答案
C 与类型无关
D NULL 不合并