事务性 DDL 与写入热点与限流与内外连接

共 64 题
#

1. DDL 与并发查询的冲突,长事务持有元数据锁导致 DDL 阻塞?

A 长事务不影响 DDL
B DDL 需等待元数据锁 ✓ 正确答案
C DDL 优先执行
D 无锁机制
#

2. DDL 在事务中的回滚,哪些操作可以回滚、哪些不可以?

A MySQL 所有 DDL 可回滚
B PostgreSQL 支持事务性 DDL ✓ 正确答案
C 所有数据库一致
D DDL 不可回滚
#

3. DDL 锁的粒度,ACCESS EXCLUSIVE(PostgreSQL)、Metadata Lock(MySQL)?

A MySQL 无锁
B 两者相同
C PostgreSQL 用 ACCESS EXCLUSIVE ✓ 正确答案
D DDL 不加锁
#

4. MySQL 8.0 引入原子 DDL(Atomic DDL)解决了哪些历史问题?

A 保证 DDL 崩溃一致性 ✓ 正确答案
B 只影响查询
C 不可回滚
D 无变化
#

5. PostgreSQL 原生支持事务性 DDL(CREATE/DROP/ALTER TABLE)的实现机制(catalog 与 heap 双写)?

A 仅靠 WAL
B 与 MVCC 无关
C DDL 不可回滚
D catalog 作为普通表支持事务 ✓ 正确答案
#

6. SQL Server 的 DDL 事务性,是否支持事务回滚 CREATE TABLE?

A 不可回滚
B 支持事务回滚 CREATE TABLE ✓ 正确答案
C 与 MySQL 相同
D 无事务
#

7. CREATE INDEX CONCURRENTLY 与 DDL 事务的关系?

A 阻塞所有 DML
B 可在事务内执行
C 与普通建索引相同
D 允许并发读写 ✓ 正确答案
#

8. DDL 与 MVCC,DDL 修改对正在执行查询的可见性?

A DDL 立即影响所有查询
B 已开始查询不受后续 DDL 影响 ✓ 正确答案
C 查询会看到 DDL 中间态
D 与 MVCC 无关
#

9. DDL 的可恢复性(Recoverable DDL)?

A DDL 永不恢复
B 原子 DDL 提升可恢复性 ✓ 正确答案
C 与日志无关
D 所有 DDL 不可恢复
#

10. DDL 的审计日志(CREATE TABLE 时间戳)?

A 无法审计
B 可记录建表时间戳 ✓ 正确答案
C 与元数据无关
D 仅第三方支持
#

11. DDL 的锁等待超时设置(lock_timeout)?

A 与锁无关
B 取消所有锁
C 增大等待时间
D 限制锁等待时间 ✓ 正确答案
#

12. DDL 触发器的 BEFORE/AFTER 语义?

A SQL Server 支持 DDL 触发器 ✓ 正确答案
B 无 BEFORE/AFTER
C PostgreSQL 原生支持
D 所有数据库都支持
#

13. MySQL 中 DDL 是否在事务中?

A DDL 在事务中
B DDL 可回滚
C DDL 隐式提交 ✓ 正确答案
D 与事务无关
#

14. MySQL 的 ALGORITHM=COPY 与 INPLACE 的差异?

A COPY 性能更好
B INPLACE 需要重建表
C 两者等价
D INPLACE 就地修改性能更好 ✓ 正确答案
#

15. MySQL 的 metadata lock 等待链?

A 长事务可阻塞 DDL ✓ 正确答案
B 无法定位
C MDL 无等待
D 与 DML 无关
#

16. PostgreSQL 中 BEGIN; CREATE TABLE t; ROLLBACK; 是否回滚?

A 不会回滚
B 会回滚,表不存在 ✓ 正确答案
C 与事务无关
D 表保留
#

17. 写入热点(Write Hotspot)的成因,自增主键最后页竞争、热点行更新、唯一键冲突?

A 无法避免
B 与主键无关
C 自增主键导致最后页竞争 ✓ 正确答案
D 只影响读
#

18. 热点行(Hot Row)的锁竞争,秒杀场景如何解决?

A 无法解决
B 拆分库存行可缓解竞争 ✓ 正确答案
C 单行写最快
D 与锁无关
#

19. 连接池的写入排队(c3p0、HikariCP、DBCP)?

A 连接池无限
B 与池无关
C 连接耗尽导致排队 ✓ 正确答案
D 越大越好
#

20. MySQL 的 innodb_write_io_threads 调优?

A 与写无关
B 只影响读
C 控制写 IO 线程数 ✓ 正确答案
D 固定不可调
#

21. PostgreSQL 的 max_wal_senders 限制?

A 只影响查询
B 与复制无关
C 固定值
D 限制流复制进程数 ✓ 正确答案
#

22. CROSS JOIN(笛卡尔积)的语义与性能陷阱?

A 只取交集
B 需要 ON 条件
C 无性能风险
D 产生笛卡尔积 ✓ 正确答案
#

23. INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN 的完整语义与执行差异?

A INNER 保留所有行
B LEFT JOIN 保留左表所有行 ✓ 正确答案
C FULL 只取交集
D RIGHT 保留左表
#

24. JOIN 与子查询的等价转换,EXISTS 子查询可改写为半连接?

A 优化器自动转换 ✓ 正确答案
B 与普通 JOIN 相同
C 只能手动改写
D 无法转换
#

25. JOIN 中空值(NULL)的处理,NULL = NULL 永假导致左表行被丢弃?

A NULL = NULL 永假 ✓ 正确答案
B NULL 能匹配
C 与 NULL 无关
D 自动匹配
#

26. JOIN 条件 ON 与 WHERE 在 OUTER JOIN 中的差异,误用 WHERE 导致 OUTER 退化为 INNER?

A 两者等价
B 无差异
C ON 在连接后评估
D WHERE 过滤右表列可使 LEFT 退化 INNER ✓ 正确答案
#

27. JOIN 的执行算法,Nested Loop、Hash Join、Sort Merge Join 的适用场景?

A Nested Loop 适合大表大表
B Hash Join 适合等值连接 ✓ 正确答案
C 与索引无关
D 无法选择
#

28. JOIN 的非等值条件(>, <, BETWEEN)的实现,Hash Join 不支持非等值?

A Hash Join 支持所有
B 与算法无关
C 非等值无法连接
D Hash Join 不支持非等值 ✓ 正确答案
#

29. JOIN 顺序对执行计划的影响,PostgreSQL 的 join_collapse_limit、MySQL 的 optimizer_search_depth?

A 与优化器无关
B 影响执行计划代价 ✓ 正确答案
C 无参数可调
D 固定顺序
#

30. LEFT JOIN 的语义,保留左表所有行,右表无匹配时填 NULL?

A 只保留匹配行
B 右表无匹配时丢弃
C 保留左表所有行 ✓ 正确答案
D 填 0
#

31. NATURAL JOIN 的风险,同名列自动等值连接导致非预期笛卡尔积?

A 需显式 ON
B 无风险
C 与列名无关
D 自动用同名列连接 ✓ 正确答案
#

32. 多表 JOIN 的链式与总线式,从事实表出发还是从维度表出发?

A 星型模型从事实表出发 ✓ 正确答案
B 与模型无关
C 驱动表无关紧要
D 链式最好
#

33. 半连接(SEMI JOIN)的语义,返回左表中在右表有匹配的行,每行只出现一次?

A 与 JOIN 相同
B 会重复行
C 每行只出现一次 ✓ 正确答案
D 返回右表行
#

34. JOIN 扇出(fan-out)为何会让 COUNT(*)/SUM() 结果膨胀(一对多连接使主表行被重复计数)?如何用先聚合再连接或半连接(EXISTS)规避?

A 无影响
B 无法规避
C 先聚合会加剧
D 一对多连接导致计数膨胀 ✓ 正确答案
#

35. 驱动表选择错误与统计信息失真为何会让 Nested Loop 的内表被反复全表扫描、代价爆炸?如何用 ANALYZE 更新统计或调整连接顺序/Hint 纠正?

A 与统计无关
B 统计失真导致代价爆炸 ✓ 正确答案
C 无法纠正
D 驱动表固定
#

36. JOIN 与覆盖索引,SELECT 仅引用 JOIN 列时是否走索引覆盖?

A 与索引无关
B 总是回表
C 覆盖索引无效
D 覆盖索引可避免回表 ✓ 正确答案
#

37. JOIN 性能调优,调整 join_collapse_limit、from_collapse_limit?

A 只影响排序
B 与优化器无关
C 固定值
D 控制 JOIN 重排 ✓ 正确答案
#

38. 如何用 LATERAL 子查询在连接前完成每行预聚合,从而避免“先连接后聚合”的扇出放大?

A 与聚合无关
B 避免先连接后聚合的扇出 ✓ 正确答案
C 加剧扇出
D 无法使用
#

39. FULL JOIN 在 PostgreSQL 与 MySQL 的支持?

A MySQL 原生支持
B 都支持
C 都不支持
D PostgreSQL 支持 ✓ 正确答案
#

40. INNER JOIN 与逗号连接的等价?

A 完全无关
B 逗号连接 + WHERE 等价 INNER JOIN ✓ 正确答案
C 无法等价
D 逗号连接是 INNER
#

41. JOIN 与 DISTINCT 的执行顺序?

A 先 DISTINCT 后 JOIN
B 先 JOIN 后 DISTINCT ✓ 正确答案
C 同时执行
D 与顺序无关
#

42. JOIN 与 GROUP BY 的协同?

A 先 GROUP 后 JOIN
B 顺序任意
C 无关
D 先 JOIN 后 GROUP BY ✓ 正确答案
#

43. JOIN 中 USING 与 ON 的等价与差异?

A 两者完全等价
B USING 保留两列
C ON 合并列
D USING 合并同名列 ✓ 正确答案
#

44. JOIN 子句能否引用 CTE?

A 不能引用
B 可以引用 CTE ✓ 正确答案
C 与作用域无关
D 仅子查询
#

45. JOIN 的别名 t1 INNER JOIN t2 的简化语法?

A 必须写 INNER
B INNER 可省略为 JOIN ✓ 正确答案
C 不能用别名
D 无法简化
#

46. JOIN 的执行计划解读(Hash Join vs Nested Loop)?

A Hash Join 显示构建哈希表 ✓ 正确答案
B Nested Loop 不显示
C 计划无法解读
D 与算法无关
#

47. JOIN 的连接谓词下推(Join Predicate Pushdown)?

A 提前过滤减少数据量 ✓ 正确答案
B 只在连接后过滤
C 与优化无关
D 无法下推
#

48. LATERAL JOIN 与普通 JOIN 的差异?

A 子查询可引用外层列 ✓ 正确答案
B 不能引用外层
C 一次性计算
D 与普通 JOIN 相同
#

49. LEFT JOIN 与 LEFT OUTER JOIN 的关系?

A 前者是内连接
B 语义不同
C 完全等价 ✓ 正确答案
D 后者是内连接
#

50. LEFT JOIN 的反向推导(找出左表独有的行)?

A 用 WHERE t2.id IS NULL ✓ 正确答案
B 用 WHERE t2.id IS NOT NULL
C 无法实现
D 与反连接无关
#

51. NATURAL JOIN 与 JOIN ... USING 的差异?

A NATURAL 显式指定
B USING 显式指定连接列 ✓ 正确答案
C 两者相同
D USING 自动连接
#

52. RIGHT JOIN 何时应改写为 LEFT JOIN?

A 无法改写
B 语义不同
C 可交换表顺序改写为 LEFT JOIN ✓ 正确答案
D 需用 FULL
#

53. STRAIGHT_JOIN(MySQL)的强制顺序?

A 强制按书写顺序连接 ✓ 正确答案
B 让优化器重排
C 与顺序无关
D 无此语法
#

54. Oracle 的 DDL 隐式提交,执行 DDL 自动 COMMIT 的行为?

A DDL 可回滚
B 与事务无关
C DDL 自动提交 ✓ 正确答案
D 不提交
#

55. DDL 的命名规范(IF NOT EXISTS)?

A 报错
B 使 DDL 幂等 ✓ 正确答案
C 覆盖已有
D 无此语法
#

56. SET TRANSACTION 与 DDL 的关系?

A 与事务无关
B MySQL 中 DDL 隐式提交 ✓ 正确答案
C DDL 不中断事务
D 所有数据库一致
#

57. Sequence 的 cache 参数对写入并发的影响?

A cache 提升写入并发 ✓ 正确答案
B cache 降低并发
C 无影响
D 只能为 1
#

58. 写入并发度的数据库参数调优,max_connections、innodb_thread_concurrency?

A 与并发无关
B 固定值
C 越大越好
D innodb_thread_concurrency 限制并发线程 ✓ 正确答案
#

59. 写合并(Write Coalescing)与批量写入(Batch Write)?

A 增加 I/O
B 与 I/O 无关
C 降低吞吐
D 合并小写减少 I/O ✓ 正确答案
#

60. 异步写入(Async Commit)的 fsync 风险?

A 更可靠
B 与持久性无关
C 总是等待
D 不等待 fsync 增加丢失风险 ✓ 正确答案
#

61. 队列化写入(Queue-based Write)模式?

A 降低吞吐
B 同步写入
C 用队列削峰 ✓ 正确答案
D 与队列无关
#

62. 限流(Rate Limiting)的应用层与数据库层实现?

A 应用层用令牌桶限流 ✓ 正确答案
B 只能数据库限流
C 无需限流
D 限流无意义
#

63. DDL 与闪回(Flashback)?

A 所有 DDL 可闪回
B 无此能力
C 与恢复无关
D Oracle 支持 Flashback Drop ✓ 正确答案
#

64. Online DDL 的失败回滚?

A 永不回滚
B 与版本无关
C MySQL 8.0 原子 DDL 可回滚 ✓ 正确答案
D 总是成功