Skip to content

数据库常见问题 ​

这里汇总后端开发中数据库相关的问题,可直接找相关场景。

MyBatis Plus 相关 ​

Q: 怎么使用 MyBatis Plus 的分页? ​

java
// 在 Service 中
Page<SysUser> page = new Page<>(current, size);
Page<SysUser> result = sysUserMapper.selectPage(page, wrapper);

Q: 多表联查时字段冲突怎么办? ​

使用 表别名@字段名 格式:

java
// 在 Mapper XML 中
SELECT u.id, u.account, d.dept_name
FROM sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.id

Q: 怎么打印 MyBatis 执行的 SQL? ​

在 application-dev.yml 中添加:

yaml
logging:
  level:
    com.guava.admin.repository: debug

数据库设计相关 ​

Q: 表命名有什么规范? ​

  • 表名使用小写字母和下划线:sys_user、sys_role
  • 统一前缀区分模块:sys_(系统管理)
  • 避免使用数据库保留字

Q: 必备字段有哪些? ​

所有表建议包含以下字段:

字段名类型说明
idBIGINT主键(Leaf 雪花 ID)
create_byVARCHAR创建人
create_timeDATETIME创建时间
update_byVARCHAR更新人
update_timeDATETIME更新时间
deletedTINYINT逻辑删除标识(0-未删除,1-已删除)

性能相关 ​

Q: 怎么定位慢 SQL? ​

  1. 在 IDEA 中开启 MyBatis SQL 日志(见上方"MyBatis Plus 相关")
  2. 启动应用后,在 IDEA Console 中查看执行的 SQL 和耗时
  3. 使用 Navicat 等数据库工具连接到数据库
  4. 复制慢 SQL,在 Navicat 的查询编辑器中使用 EXPLAIN 分析执行计划
  5. 检查是否命中索引、是否存在全表扫描
  6. 确认是否对 WHERE 条件字段建立了索引

Q: 怎么确认 SQL 是否命中索引? ​

  1. 使用 Navicat 等数据库工具连接到目标数据库
  2. 打开查询编辑器
  3. 输入 EXPLAIN <你的SQL> 并执行
  4. 查看输出结果中的 key 列:
    • key IS NULL → 未命中索引
    • key 有值 → 命中了对应索引
  5. 如果未命中索引,考虑添加索引