On Monday 08 December 2008, Matthias Sch. wrote:
> Hallo zusammen,
>
> ich habe die Anfragen etwas umgestaltet in :
>
> li =  Term.find(:all,           #Oberbegriffe
>
>                     :joins => 'INNER JOIN sims ON sims.term1_id =
>
> terms.id INNER JOIN terms terms2 ON sims.term2_id = terms2.id',
>
>     :conditions => ["terms2.bezeichnung IN (?)",tag],
>     :order => 'sims.similarity DESC',
>     :limit => 5).each do |element|
>
>       @super_terms <<  element.bezeichnung
>     end
>     return @super_terms
>
> und in die andere Richtung :
>
>  la =  Term.find(:all,       #Unterbegriffe
>
>                    :joins => 'INNER JOIN sims ON sims.term2_id =
>
> terms.id INNER JOIN terms terms2 ON sims.term1_id = terms2.id',
>
>     :conditions => ["terms2.bezeichnung IN (?)",tag],
>     :order => 'similarity DESC',
>     :limit => 15).each do |element|
>
>       @sub_terms << element.bezeichnung
>     end
>     return @sub_term

Ersetze das #each durch ein #map, das ist in Ruby viel idiomatischer und 
erspart auch das ohnehin überflüssige return.

> Woran kann das liegen und wie bekomm ich das
> performanter hin?

Hast du einzelne Methoden in script/console aufgerufen oder Requests an 
die Anwendung getestet? In beiden Fällen, schau im development.log, 
welche Anfragen an die Datenbank geschickt werden als Folge einer 
solchen Aktion. Wenn du das SQL aus dem Log ausschneidest, kannst du es 
auch auf der mysql-Kommandozeile ausführen. Dort bekommst du mit

EXPLAIN SELECT ...

eine Erklärung, wie MySQL die Anfrage ausführt.

Michael

-- 
Michael Schuerig
mailto:[EMAIL PROTECTED]
http://www.schuerig.de/michael/
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/mailman/listinfo/rubyonrails-ug

Antwort per Email an