Sobes.tech
Middle

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: joins sonrası, ilişkili verilere erişim ek sorgular gerektirir. includes sonrası, 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.