返回数据库常见问题
帮助中心 · 常见问题数据库1 分钟阅读

如何减少应用中的 N+1 数据库查询?

N+1 模式是指代码先读取一个列表,随后又为每个项目单独执行一次查询,导致查询数量随结果规模增长。即使单次查询很快,这也会增加延迟;应定位重复访问路径,并用有限次数的查询加载关联数据。

数据库

找出重复查询

使用查询日志、链路追踪或数据库指标,定位执行大量相似语句的请求。比较查询数量与返回记录数,并检查是哪种关系或字段触发了重复读取。

开发环境中的少量数据可能掩盖问题。应使用接近实际的列表规模复现,并检查序列化、模板或辅助函数是否隐式访问关联对象。

有计划地加载关联数据

根据数据模型和数据库,可以使用联表查询、按键批量查询或 ORM 的预加载功能。既要避免逐行查询,也要避免返回大量重复数据的超大结果集。

比较修改前后的查询总数、返回行数、响应大小和延迟。为典型列表规模添加回归检查,同时在调整关联数据加载方式时保留分页和授权筛选。

返回数据库常见问题