Einzelnen Beitrag anzeigen

Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.426 Beiträge
 
Delphi 2007 Professional
 
#1

Firebird IN, EXISTS Langsam

  Alt 7. Feb 2011, 16:37
Datenbank: Firebird • Version: 2.5 • Zugriff über: Console
So, habe schon mal vor langer zeit gefragt, und verwende im Moment den aktuellen Firebird 2.5, und habe bei einem SQL Statement ein Speedproblem (nicht so schlimm, aber möchte es verstehen, wie und ob man es schneller machen kann)

Verienfacht gesagt ich habe 2 Tabellen
"Artikel" und "Positionen"
ich möchte alle Artikel rausbekommen die nicht in der Position Tabelle vorhanden ist (dort können die auch öfters vorkommen)

Die Versuche waren

Code:
SELECT A.ID FROM ARTIKEL A WHERE A.ID IN (SELECT T.ARTIKEL_ID FROM V_AUFTRAG_PO T WHERE A.ID = T.ARTIKEL_ID GROUP BY T.ARTIKEL_ID)
Code:
SELECT A.ID FROM ARTIKEL A WHERE A.ID NOT IN (SELECT T.ARTIKEL_ID FROM V_AUFTRAG_PO T WHERE A.ID = T.ARTIKEL_ID GROUP BY T.ARTIKEL_ID)
Code:
SELECT A.ID FROM ARTIKEL A WHERE NOT EXISTS (SELECT T.ARTIKEL_ID FROM V_AUFTRAG_PO T WHERE A.ID = T.ARTIKEL_ID)
Code:
SELECT A.ID FROM ARTIKEL A WHERE EXISTS (SELECT T.ARTIKEL_ID FROM V_AUFTRAG_PO T WHERE A.ID = T.ARTIKEL_ID)

dauern alle ca. 26 sekunden

das alleinige
Code:
SELECT A.ID FROM ARTIKEL A
dauert sammt Fetchall ein paar ms und liefert ca 2500 Rekord

das alleinige
Code:
SELECT T.ARTIKEL_ID FROM V_AUFTRAG_PO T GROUP BY T.ARTIKEL_ID
dauert sammt Fetchall auch nur ein paar ms und liefert ca 1200 Rekords


nur die kombination in welcher form auch immer, dauert über 25 Sekunden ...

Hat wer eine Idee, wie man das beschleunigen kann?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat