რა განსხვავებაა Ruby on Rails-ში Joins და Includes-ს შორის?
sobes.tech AI
პასუხი AI-სგან
joins გამოიყენება SQL JOIN ოპერაციების შესრულებისთვის, რათა აირჩიოს მონაცემები ტაბლებს შორის კავშირების საფუძველზე, მაგრამ ამ დროს იწერება მხოლოდ ძირითადი მოდელის სვეტები.
includes გამოიყენება N+1 შეკვეთების პრობლემის გადასაჭრელად. ის ან ახორციელებს ერთ SQL-ს შეკვეთას LEFT OUTER JOIN-ით (თუ არ არის პირობები ჩართული კავშირებზე), ან ორი SQL-ს შეკვეთას (ერთი ძირითადი მოდელისთვის, მეორე დაკავშირებული მოდელებისთვის), რათა ჩატვირთოს ყველა დაკავშირებული მოდელის მონაცემები ძირითადი მოდელთან ერთად, თავიდან აიცილოს დამატებითი შეკვეთების რაოდენობა.
ძირითადი განსხვავებები:
- მიზანი:
joins- ფილტრაცია/შერჩევა კავშირების საფუძველზე;includes- დაკავშირებული მონაცემების ოპტიმიზაცია (N+1). - SQL შეკვეთა:
joins- ჩვეულებრივ INNER JOIN (მაგრამ შეიძლება იყოს სხვა);includes- LEFT OUTER JOIN ან ორი ცალკეული შეკვეთა. - მონაცემების ჩატვირთვა:
joins- იწერს მხოლოდ ძირითადი მოდელს, დაკავშირებული მონაცემები მიუწვდომელია დამატებითი შეკვეთების გარეშე;includes- იწერს ძირითადი მოდელს და დაკავშირებულ მოდელებს. - მონაცემებზე წვდომა:
joins-ის შემდეგ წვდომა დაკავშირებულ მონაცემებზე გამოიწვევს დამატებით შეკვეთებს.includes-ის შემდეგ წვდომა დაკავშირებულ მონაცემებზე არ გამოიწვევს დამატებით შეკვეთებს.
# მაგალითი joins-ის გამოყენებისთვის
# მოძებნეთ მომხმარებლები, რომლებსაც მინიმუმ ერთი პოსტი აქვთ
User.joins(:posts)
# მაგალითი includes-ის გამოყენებისთვის
# ჩატვირთეთ ყველა მომხმარებელი და მათი პოსტები ერთ ან ორ შეკვეთაში
User.includes(:posts).each do |user|
user.posts.each do |post|
# წვდომა პოსტზე დამატებითი შეკვეთების გარეშე
puts post.title
end
end
შერჩევა joins და includes შორის დამოკიდებულია ამოცანაზე: თუ საჭიროა მხოლოდ ძირითადი მოდელის ჩანაწერების ფილტრაცია დაკავშირებული მონაცემების საფუძველზე, გამოიყენეთ joins. თუ გსურთ მიიღოთ ძირითადი მოდელი დაკავშირებული მონაცემებით მათი შემდგომი გამოყენებისთვის N+1 პრობლემის გარეშე, გამოიყენეთ includes.