N+1 问题发生在某个字段的 resolver 对每个 parent 项各运行一次,而每次运行都发起自己的数据库查询时。取回 N 篇 post 的列表、再取每篇 post 的 author,会触发 1 次查询取 posts + N 次查询取 authors——共 N+1 次往返,在高负载下会拖垮性能。
它为什么会发生
resolver 是按字段、按项运行的。Post.author 对列表里的每篇 post 都单独执行,彼此互不知情,于是每个都各自做 findById。
js
resolvers = {
: {
: ctx...(post.),
},
};
