Ruby on Rails-də Joins və Includes arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
joins SQL JOIN əməliyyatlarını yerinə yetirmək üçün istifadə olunur, cədvəllər arasındakı əlaqələrə əsaslanaraq məlumatları seçmək üçün, lakin yalnız əsas modelin sütunlarını yükləyir.
includes N+1 sorğu problemini həll etmək üçün istifadə olunur. O, ya LEFT OUTER JOIN ilə bir SQL sorğusu icra edir (əgər daxil edilən əlaqələr üçün şərtlər yoxdursa), və ya iki SQL sorğusu (birincisi əsas model üçün, ikincisi əlaqəli modellər üçün), bütün əlaqəli modellərin məlumatlarını əsas model ilə birlikdə yükləyərək çoxsaylı əlavə sorğulardan qaçınır.
Əsas fərqlər:
- Məqsəd:
joins- əlaqələr əsasında filtrləmə/seçim;includes- əlaqəli məlumatların yüklənməsini optimallaşdırmaq (N+1). - SQL sorğusu:
joins- adətən INNER JOIN (amma başqa da ola bilər);includes- LEFT OUTER JOIN və ya iki ayrı sorğu. - Məlumatların yüklənməsi:
joins- yalnız əsas modeli yükləyir, əlaqəli məlumatlar əlavə sorğular olmadan əlçatan deyil;includes- əsas modeli və əlaqəli modelləri yükləyir. - Əlaqəli məlumatlara giriş:
joins-dən sonra, əlaqəli məlumatlara giriş əlavə sorğular tələb edir.includes-dən sonra, əlaqəli məlumatlara giriş əlavə sorğular tələb etmir.
# joins nümunəsi
# Ən azı bir postu olan istifadəçiləri tapın
User.joins(:posts)
# includes nümunəsi
# Bütün istifadəçiləri və onların postlarını bir və ya iki sorğu ilə yükləyin
User.includes(:posts).each do |user|
user.posts.each do |post|
# əlavə sorğu olmadan posta giriş
puts post.title
end
end
joins və includes seçimi vəzifədən asılıdır: əgər sadəcə əlaqəli məlumatlara əsaslanaraq əsas modelin qeydlərini filtrləmək istəyirsinizsə, joins istifadə edin. Əgər əsas modeli və əlaqəli məlumatları N+1 problemi olmadan sonrakı istifadə üçün əldə etmək istəyirsinizsə, includes istifadə edin.