全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页

批量操作与性能优化专题测试

10 题 45 分钟 难度:

考察知识点

  • SQL 语句优化:动态 SQL 标签选择、索引利用、批量 SQL 生成与日志影响
  • ExecutorType 批量执行:SIMPLE/BATCH/REUSE 三种执行器的特点与适用场景
  • 结果集大小控制:fetchSize、Cursor、ResultHandler 流式处理机制
  • 批量操作事务控制:事务边界、分段提交策略、异常回滚处理
1
单选题

在 MyBatis 中,以下哪种方式最适合实现"多条件可选查询"的 SQL 语句优化,避免全表扫描并提高执行效率?

A

使用多个 标签拼接所有条件,不考虑索引失效问题

B

使用 标签选择最优索引条件作为首个 WHERE 子句,其余作为 AND 条件

C

将所有条件都用 OR 连接,确保查询结果完整

D

使用动态表名,每次查询都指定不同的物理表

2
多选题

在 MyBatis 项目中进行 SQL 语句优化时,以下哪些做法是正确的?

A

使用 标签自动处理 WHERE 子句开头的 AND/OR 关键字,避免 SQL 语法错误

B

使用 SELECT * 查询所有字段,减少后续增加字段时修改 SQL 的维护成本

C

对频繁作为查询条件的字段建立索引,并在 MyBatis XML 中确保这些条件出现在 WHERE 子句靠前位置

D

使用 批量操作时,设置合理的 batch size 避免单次 SQL 语句过长导致数据库拒绝执行

E

将复杂的关联查询拆分为多次简单查询,在 Java 代码中进行数据组装,以提升可维护性

3
单选题

在 MyBatis 中处理大数据量查询时,以下哪种分页方式在数据量达到百万级时性能最优?

A

使用 LIMIT #{offset}, #{pageSize} 的 MySQL 分页方式

B

使用 RowBounds 对象进行内存分页

C

使用基于上一批最后一条记录 ID 的游标分页(WHERE id > lastId LIMIT #{pageSize})

D

先查询总记录数,再根据页码计算 offset 进行分页

4
判断题

MyBatis 的 ResultHandler 回调接口可以在查询过程中逐行处理结果集,因此使用 ResultHandler 一定能避免大数据量查询时的 OOM 问题。

A

B

5
填空题

MyBatis 提供了三种 ExecutorType 执行器类型,分别用于不同的执行场景:

  1. 默认的执行器类型是 ___________________,它为每条 SQL 语句创建一个 PreparedStatement
  2. 批量执行时使用 __________________,它会复用 PreparedStatement 并将 SQL 语句加入批次,等待统一执行
  3. 可重用执行器类型是 __________________,它会缓存 PreparedStatement 对象,适用于频繁执行相同 SQL 的场景
6
多选题

关于 MyBatis 使用 ExecutorType.BATCH 进行批量操作,以下哪些说法是正确的?

A

BATCH 模式下可以正常获取每条 SQL 语句的执行结果(影响行数),无需特殊处理

B

使用 BATCH 模式时,需要在适当时候调用 SqlSession.flushStatements() 以清空批次队列,防止内存溢出

C

BATCH 模式与 Spring 的 @Transactional 注解配合使用时,需要确保 SqlSession 在同一个事务内

D

JDBC URL 中配置 rewriteBatchedStatements=true(MySQL),可以进一步提升 BATCH 模式的性能

E

BATCH 模式适用于 SELECT 查询,可以显著减少多表查询的执行时间

7
单选题

在 MyBatis 中执行批量 INSERT 操作时,如果其中一条 SQL 执行失败,默认情况下会发生什么?

A

已执行的 SQL 会自动提交,失败的 SQL 被跳过

B

整个事务回滚,所有已执行的 SQL 都会被撤销

C

只有失败的 SQL 回滚,其余 SQL 正常提交

D

MyBatis 会自动重试失败的 SQL,直到成功

8
填空题

在 MyBatis 中处理大批量数据时,为了避免长事务导致的锁等待和内存问题,通常采用分段提交的策略:

  1. 设置合理的批量大小(如每 ______ 条记录为一批),控制单次事务的数据量
  2. 每批数据执行后调用 SqlSession 的 _______________() 方法执行批次 SQL
  3. 调用 SqlSession 的 ______() 方法提交当前批次事务
  4. 如果某批次失败,调用 SqlSession 的 ________() 方法回滚当前批次
  5. 在 Spring 环境中,也可以通过编程式事务管理器 ________________________ 实现细粒度的事务控制
9
填空题

在 MyBatis 中处理超大数据集时,为了避免一次性加载所有数据到内存,可以使用以下技术:

  1. 在 Mapper 方法上设置 _________ 参数,控制 JDBC 驱动每次从数据库获取的行数
  2. 使用 ______ 类型的返回值,实现真正的流式结果集处理
  3. 在 MySQL 数据库中,需要将 fetchSize 设置为 _________________ 才能启用真正的流式读取
  4. 使用流式处理时,Mapper 方法的返回值类型应该是 ______,并通过 _____________ 回调接口逐行处理结果
10
判断题

MyBatis 使用 标签生成批量 INSERT 语句时,如果一次插入的数据量过大(如上万条),会导致数据库的 redo log 和 undo log 急剧增长,可能引发数据库性能问题甚至磁盘空间不足。

A

B

← 上一个试卷 性能调优实战专题测试
下一个试卷 → 接口绑定与动态代理专题测试

📝 发现内容有误?点击此处直接编辑

想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库