SORU
30 Temmuz 2009, PERŞEMBE


Raylar :vs :birleşimler vardır

Bu bir daha "neden her şey" yerine bir soru "nasıl bilmiyorum" soru . bunu bu şekilde iş yapmak

Kullanmak için gidiyoruz biliyorum ilişkili kayıtlarını incelemeye ilişkin bir müjde ve ekstra sorguları bir sürü katıl önlemek alırsınız çünkü :include kullanmak için:

Post.all(:include => :comments)

Baktığınızda ancak günlükleri, hayır katılın oluyor:

Post Load (3.7ms)   SELECT * FROM "posts"
Comment Load (0.2ms)   SELECT "comments.*" FROM "comments" 
                       WHERE ("comments".post_id IN (1,2,3,4)) 
                       ORDER BY created_at asc) 

yorumların hepsini tek seferde çeker çünkü kestirmeden, ama yine de katılmak tüm belgelere söylemek zorundayım ki, ne yazık ki). Birleşim almanın tek yolu :include yerine :joins kullanmak için:

Post.all(:joins => :comments)

Ve gösteri günlükleri:

Post Load (6.0ms)  SELECT "posts".* FROM "posts" 
                   INNER JOIN "comments" ON "posts".id = "comments".post_id

Bir şey mi kaçırdım? Yarım düzine dernekleri ile bir uygulamam var ve tek bir ekranda tüm verileri görüntüleyebilir. -Ed birleşim 6 bireyler yerine sorgu için daha iyi olurdu gibi geliyor. Biliyorum performans açısından değil her zaman daha iyi yapmak için katılmak yerine tek bir sorgu (aslında eğer zaman geçirdim, görünüşe göre iki ayrı sorgular üstünde daha hızlı birleştirme), ama sonra tüm belgeleri okuyorum şaşırdım görmek :include çalışmıyor olarak reklamı.

Belki Raylarperformans, idrak sorunu ve dışında bazı durumlarda katıl değil mi?

CEVAP
30 Temmuz 2009, PERŞEMBE


:include işlevselliği Raylar ile 2.1 olarak değişti gibi görünüyor. Raylar yapmak için kullanılan tüm durumlarda katılmak, ama performansı artırmak için bazı durumlarda birden fazla sorgu kullanmak için değiştirildi. Fabio Akita This blog post değişim bazı iyi bilgi var (başlıklı bölüme bakın "Eager Loading") Optimize edilmiş.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • Rockstar Games

    Rockstar Gam

    17 ŞUBAT 2006
  • William Sledd

    William Sled

    24 EYLÜL 2006