Erstellt vor 18 Monaten
Geschlossen vor 18 Monaten
#2359 closed Fehler (fixed)
sub get_warehouse takes ages
| Erstellt von: | od-peter | Verantwortlicher: | m.bunkus@… |
|---|---|---|---|
| Priorität: | normal | Meilenstein: | |
| Komponente: | kivitendo ERP | Version: | 3.0.0 unstable |
| Schweregrad: | normal | Stichworte: | |
| Beobachter: |
Beschreibung
Mit steigender Anzahl an Lagerbewegungen und Waren wird es immer schwieriger Lagerplätze zu bearbeiten da die Abfrage immer länger dauert.
Ursache ist vermutlich die Änderung der SQL-Abfrage in get_warehouse im Commit 82c4717 (Ticket #2284).
Statt aktuell:
(SELECT i.warehouse_id, p.warehouse_id FROM inventory i, parts p WHERE i.bin_id = b.id OR p.bin_id = b.id LIMIT 1)
Sollte man an dieser Stelle evtl. besser mit UNION arbeiten:
( (SELECT i.warehouse_id FROM inventory i WHERE i.bin_id = b.id LIMIT 1) UNION (SELECT p.warehouse_id FROM parts p WHERE p.bin_id = b.id LIMIT 1) )
Damit läuft die Abfrage in meinem Fall keine 3 Minuten (!) mehr sondern unter einer Sekunde.
Gruß Peter
PS: Patch folgt.
Änderungshistorie (2)
comment:1 Geändert vor 18 Monaten durch m.bunkus@…
comment:2 Geändert vor 18 Monaten durch m.bunkus@…
- Lösung auf fixed gesetzt
- Status von new nach closed geändert
- Verantwortlicher auf m.bunkus@… gesetzt
Hinweis: Hilfe zur Verwendung von Tickets finden Sie in TracTickets.

Klingt sinnvoll & sieht logisch betrachtet richtig aus, ja.
Noch sinnvoller wäre eine Aufsplitting des EXISTS selber, grob gesehen so:
Grund: so kann die Datenbank besser Shortcutten und nach dem Scan der ersten Tabelle eventuell schon abbrechen.
Ich patch das kurz (hab das Query ja schon umgeschrieben), du brauchst keinen Patch mehr zu schicken.