Встречается на собеседованиях • сегодня
Что такое N+1 SELECT проблема
N+1 SELECT проблема возникает, когда ORM (например, Hibernate) выполняет один запрос для получения основного набора данных, а затем делает дополнительные запросы для каждой связанной сущности. Это приводит к неоптимальной работе с БД.
Пример с Hibernate:
```java
@Entity
class Author {
@Id Long id;
@OneToMany(mappedBy = "author")
List books;
}
@Entity
class Book {
@Id Long id;
@ManyToOne
Author author;
}
// Проблемный код:
List authors = entityManager.createQuery("SELECT a FROM Author a", Author.class).getResultList();
// Для каждого автора выполняется отдельный запрос книг:
authors.forEach(a -> a.getBooks().size()); // N+1 запросов
```
Решение:
1. Использовать JOIN FETCH:
```java
List authors = entityManager.createQuery(
"SELECT DISTINCT a FROM Author a LEFT JOIN FETCH a.books",
Author.class).getResultList();
```
2. Использовать @BatchSize для ленивой загрузки
3. Настроить EntityGraph

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы