跳至主内容区
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

高效使用查询构建器

避免 N+1 查询问题

当系统为每条检索的数据执行过多子查询时,就会出现 N+1 查询问题。

为避免此问题,可使用 leftJoinAndSelectinnerJoinAndSelect 将表合并到单次查询中,而非执行多次查询。

const users = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.leftJoinAndSelect("user.posts", "post")
.getMany()

此处,leftJoinAndSelect 能帮助在单次查询中获取所有用户帖子,而非执行多次小型查询。

仅需原始数据时使用 getRawMany()

当不需要完整对象时,可使用 getRawMany() 获取原始数据,避免 TypeORM 处理过多信息。

const rawPosts = await dataSource
.getRepository(Post)
.createQueryBuilder("post")
.select("post.title, post.createdAt")
.getRawMany()

使用 select 限制字段

为优化内存使用并减少不必要数据,请使用 select 仅选择所需字段。

const users = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.select(["user.name", "user.email"])
.getMany()