Wat is het verschil tussen Joins en Includes in Ruby on Rails?
sobes.tech AI
Antwoord van AI
joins wordt gebruikt om SQL JOIN-operatoren uit te voeren, om gegevens te selecteren op basis van relaties tussen tabellen, maar laadt alleen de kolommen van het hoofdmodel.
includes wordt gebruikt om het N+1-queryprobleem op te lossen. Het voert of één SQL-query uit met LEFT OUTER JOIN (als er geen voorwaarden zijn op de opgenomen associaties), of twee SQL-query's (één voor het hoofdmodel, één voor de gerelateerde modellen), om alle gegevens van de gerelateerde modellen samen met het hoofdmodel te laden, waardoor meerdere extra query's worden vermeden.
Belangrijke verschillen:
- Doel:
joins- filteren/selecteren op basis van relaties;includes- optimalisatie van het laden van gerelateerde gegevens (N+1). - SQL-query:
joins- meestal INNER JOIN (maar kan ook anders);includes- LEFT OUTER JOIN of twee aparte query's. - Gegevens laden:
joins- laadt alleen het hoofdmodel, gerelateerde gegevens zijn niet zonder extra query's toegankelijk;includes- laadt het hoofdmodel en de gerelateerde modellen. - Toegang tot gerelateerde gegevens: Na
joinsvereist toegang tot gerelateerde gegevens extra query's. Naincludesvereist toegang tot gerelateerde gegevens geen extra query's.
# Voorbeeld van gebruik van joins
# Vind gebruikers die ten minste één bericht hebben
User.joins(:posts)
# Voorbeeld van gebruik van includes
# Laad alle gebruikers en hun berichten in één of twee query's
User.includes(:posts).each do |user|
user.posts.each do |post|
# Toegang tot het bericht zonder extra query
puts post.title
end
end
De keuze tussen joins en includes hangt af van de taak: als je alleen records van het hoofdmodel wilt filteren op basis van gerelateerde gegevens, gebruik dan joins. Als je het hoofdmodel samen met de gerelateerde gegevens wilt ophalen voor later gebruik zonder N+1-problemen, gebruik dan includes.