Ruby on Rails'ta Joins ve Includes arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
joins SQL JOIN operatörlerini gerçekleştirmek için kullanılır, tablolar arasındaki ilişkiler temelinde veri seçmek için, ancak yalnızca ana modelin sütunlarını yükler.
includes, N+1 sorgu sorununu çözmek için kullanılır. Ya LEFT OUTER JOIN ile tek bir SQL sorgusu çalıştırır (birleşmiş ilişkilere ilişkin koşullar yoksa), ya da tüm ilişkili modellerin verilerini ana modelle birlikte yüklemek için iki SQL sorgusu çalıştırır, böylece birçok ek sorgudan kaçınılır.
Anahtar farklar:
- Amaç:
joins- ilişkiler temelinde filtreleme/seçim;includes- ilişkili verilerin yüklenmesini optimize etme (N+1). - SQL sorgusu:
joins- genellikle INNER JOIN (başka da olabilir);includes- LEFT OUTER JOIN veya iki ayrı sorgu. - Veri yükleme:
joins- yalnızca ana modeli yükler, ilişkili veriler ek sorgular olmadan erişilebilir değildir;includes- ana modeli ve ilişkili modelleri yükler. - İlişkili verilere erişim:
joinssonrası, ilişkili verilere erişim ek sorgular gerektirir.includessonrası, ilişkili verilere erişim ek sorgu gerektirmez.
# joins kullanımı örneği
# En az bir gönderisi olan kullanıcıları bul
User.joins(:posts)
# includes kullanımı örneği
# Tüm kullanıcıları ve gönderilerini tek veya iki sorguda yükle
User.includes(:posts).each do |user|
user.posts.each do |post|
# Ek sorgu olmadan gönderiye erişim
puts post.title
end
end
joins ve includes arasındaki seçim, göreve bağlıdır: yalnızca ilişkili verilere göre ana model kayıtlarını filtrelemek istiyorsanız joins kullanın. Ana modeli ve ilişkili verileri, N+1 sorunları olmadan sonraki kullanımlar için almak istiyorsanız includes kullanın.