Wenn es so lange läuft, wird der Index nicht genutzt. Der dient je gerade dazu, die Komplexität logarithmisch zu begrenzen.
Ein paar Ideen, je nachdem, was dein
DBMS kann:
- Hast du überhaupt einen Index auf ArtikelNr?
- Führe im JOIN einen Linksvergleich mit LIKE aus (setzt Index auf ArtikelNr voraus):
Code:
LEFT OUTER JOIN VorgangPos vp2 ON vp2.ArtikelNr LIKE substring(vp.ArtikelNr from 1 for 5) || '%'
(Ich hab keine Ahnung, was in deinem DBMS der Konkatenationsoperator ist. Da hat jedes seinen eigenen, Doppelpipe ist einfach der SQL-Standard, an den sich fast niemand hält.)
- LEFT statt SUBSTRING benutzen.
- Index auf eine berechnete Spalte mit dem Vergleichswert setzen.