Перейти к основному содержанию
Неофициальный Бета-перевод

Эта страница переведена PageTurner AI (бета). Не одобрена официально проектом. Нашли ошибку? Сообщить о проблеме →

Эффективное использование Query Builder

Избегание проблемы N+1 запросов

Проблема N+1 запросов возникает, когда система выполняет слишком много подзапросов для каждой извлекаемой строки данных.

Чтобы этого избежать, используйте leftJoinAndSelect или innerJoinAndSelect для объединения таблиц в одном запросе вместо выполнения множественных запросов.

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()