Hast du mal ein explain auf das Statement laufen lassen - ich meine
mich vage daran zu erinnern, dass es mit subselects&indexes mal eine
ganze Weile lang Probleme bei mysql gab: Vielleicht benutzt das
Statement den index gar nicht?!
Grüße
stefan
Am 08.11.2009 um 20:57 schrieb Michael Schuerig:
On Sunday 08 November 2009, rubyonrails...@galt.de wrote:
Hallo,
ich habe hier etwas ziemlich häßliches und dazu noch ziemlich lahmes:
named_scope :on_stock,
:include => [:po_items, :sales],
:conditions => [
<<-EOF
( ( SELECT SUM(po_items.quantity)
FROM po_items
WHERE product_id = products.id AND
po_items.delivery_status_type = 1) -
( SELECT SUM(sales.quantity)
FROM sales
WHERE product_id = products.id ) ) > 0
EOF
]
Je mehr Verkäufe (sales) du insgesamt hast, um so langsamer wird deine
Anwendung mit der Zeit. Das klingt nicht gut.
Wenn du bei dieser Datenmodellierung bleiben willst, solltest du
prüfen,
ob die relevanten Tabellen geeignet indiziert sind und diese Indexe
auch
verwendet werden.
Bessere Performance wirst du aber bekommen, wenn du zu jedem Produkt
explizit die inventarisierte Anzahl speicherst und diesen Wert bei
Lieferungen und Verkäufen aktualisierst. Dazu bieten sich innerhalb
der
DB Trigger, in Rails sind Observer für POItem und Sale das Mittel der
Wahl.
Michael
--
Michael Schuerig
mailto:mich...@schuerig.de
http://www.schuerig.de/michael/
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug
----
stefan frank
vierundsechzig.de
software&service
weberstr. 10
69120 heidelberg
tel. +49 (0) 6221 7277049
mobil +40 (0) 173 2383390
mail s.fr...@vierundsechzig.de
www.vierundsechzig.de
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug