数据库常见问题
这里汇总后端开发中数据库相关的问题,可直接找相关场景。
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.idQ: 怎么打印 MyBatis 执行的 SQL?
在 application-dev.yml 中添加:
yaml
logging:
level:
com.guava.admin.repository: debug数据库设计相关
Q: 表命名有什么规范?
- 表名使用小写字母和下划线:
sys_user、sys_role - 统一前缀区分模块:
sys_(系统管理) - 避免使用数据库保留字
Q: 必备字段有哪些?
所有表建议包含以下字段:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | BIGINT | 主键(Leaf 雪花 ID) |
| create_by | VARCHAR | 创建人 |
| create_time | DATETIME | 创建时间 |
| update_by | VARCHAR | 更新人 |
| update_time | DATETIME | 更新时间 |
| deleted | TINYINT | 逻辑删除标识(0-未删除,1-已删除) |
性能相关
Q: 怎么定位慢 SQL?
- 在 IDEA 中开启 MyBatis SQL 日志(见上方"MyBatis Plus 相关")
- 启动应用后,在 IDEA Console 中查看执行的 SQL 和耗时
- 使用 Navicat 等数据库工具连接到数据库
- 复制慢 SQL,在 Navicat 的查询编辑器中使用 EXPLAIN 分析执行计划
- 检查是否命中索引、是否存在全表扫描
- 确认是否对
WHERE条件字段建立了索引
Q: 怎么确认 SQL 是否命中索引?
- 使用 Navicat 等数据库工具连接到目标数据库
- 打开查询编辑器
- 输入
EXPLAIN <你的SQL>并执行 - 查看输出结果中的
key列:key IS NULL→ 未命中索引key有值 → 命中了对应索引
- 如果未命中索引,考虑添加索引