Skip to content

seyyedBagherMusavi/Nproblem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

In this example, we will illustrate the challenges of addressing the N+1 problem. Consider an entity called "A," which has relationships with "B," "C," and "D." Mpdel layer If we want to fetch all the data with a single query, we can use a left join. However, the size of the data will increase with each additional relationship. For instance, if we want to fetch "A" and "B" together, we can use the following query:

select
    a1_0.id,
    a1_0.a1,
    a1_0.a2,
    a1_0.a3,
    a1_0.a4,
    a1_0.a5,
    a1_0.a6,
    a1_0.a7,
    a1_0.a8,
    b1_0.a_id,
    b1_0.id,
    b1_0.b1
from
    a a1_0
left join
    b b1_0
        on a1_0.id=b1_0.a_id

This query returns 2.9 MB of data. However, if we want to fetch "C," we need to join with "C," resulting in a query like this:

select
    a1_0.id,
    a1_0.a1,
    a1_0.a2,
    a1_0.a3,
    a1_0.a4,
    a1_0.a5,
    a1_0.a6,
    a1_0.a7,
    a1_0.a8,
    b1_0.a_id,
    b1_0.id,
    b1_0.b1,
    c1_0.a_id,
    c1_0.id,
    c1_0.c1
from
    a a1_0
left join
    b b1_0
        on a1_0.id=b1_0.a_id
left join
    c c1_0
        on a1_0.id=c1_0.a_id

This query returns 300 MB of data. If we want to fetch "D," the result will be 30 GB in size, which can cause the application to crash.

To prevent the N+1 problem, it's not advisable to attempt to retrieve all the data with a single query. Also, retrieving the data with 301 queries is not an ideal solution. Instead, we can use a different approach, such as employing "@Fetch(FetchMode.SUBSELECT)." This method enables us to retrieve all the data by using only four queries.

Releases

No releases published

Packages

No packages published

Languages