Hi,
»»...als faustregel gilt, er KANN abfragen beschleunigen, bringt aber einbußen beim löschen, einfügen und verändern von datensätzen.
Ja, das hatte ich inzwischen schon vermutet.
Das schöne an der Quelldatenbank ist, dass sie nur zwei mal täglich von CSV-Files importiert, danach in eine Zieldatenbank aufbereitet wird und ab da nicht mehr zum schreiben verwendet wird. Aber 25 Minuten pro Abfrage waren für den Job einfach viel zu lang.
Ich lasse dann meinen Cronjob wie folgt laufen:
-> Temp DB aus CSV-Daten anlegen/füllen
-> Indexe über Temp DB legen
-> Live DB durch Temp DB ersetzen
-> Aufbereitung starten
Damit dürfte die Performance wohl am besten sein.
insofern macht es keinen sinn, deine tabelle mit indexen zu erschießen, das bringt unter dem strich oftmals nur nachteile.
Ich verstehe was du meinst, aber in dem konkreten Beispiel wird es noch andere Querries geben in denen auch die restlichen Felder benötigt werden.
In Anbetracht der tatsache, dass die DB nach der Indizierung nur noch gelesen werden muss ist das denke ich kein Problem fast alles zu indizieren.
zum anderen hast du ein DISTINCT in deiner abfrage stehen. es ist zu klären, ob du dies überhaupt brauchst, ob doppelte werte vorkommen können und wenn ja, ob die dann auch wegfallen sollen.
Kann man beides mit "ja" beantworten. Die doppelten Werte würden später zu Problemen führen.
und gibt es den werte in der ref_sp Tabelle, wo die oid spalte werte mit kleiner 0 haben ?
Nicht <0, aber =0
Danke euch für alle Tipps!