SQL ----------------------------------- SELECT DISTINCT D.DINFO, C.CINFO, B.BINFO, A.NR1, A.NR2, A.ADATE FROM ATABEL A, BTABEL B, CTABEL C, DTABEL D WHERE B.NR1 = \'INDTAST1\' AND B.NR2 LIKE \'INDTAST2%\' AND A.NR1 = B.NR1 AND A.NR2 = B.NR2 AND A.ADATE >= SYSDATE AND C.NR1 = B.NR1 AND C.NR4 = B.NR4 AND D.NR3 = A.NR3 ORDER BY D.DINFO, C.CINFO, B.BINFO
Dette medfører da også at din indledende SQL er ganske korrekt. Det er nok nærmere et index spørgsmål. Måske skal du prøve at sætte join-betingelserne (alle dem med ligmedtegn (=) i) op forrest og lade dine like og datoting stå til allersidst.
Kommentar til pou_vad: Siden hvornår har MS overholdt SQL ANSI standarden?
Rækkefølgen af tabellerne i FROM kan have noget at sige, prøv med :
SELECT DISTINCT D.DINFO, C.CINFO, B.BINFO, A.NR1, A.NR2, A.ADATE FROM BTABEL B, ATABEL A, CTABEL C, DTABEL D WHERE B.NR1 = \'INDTAST1\' AND B.NR2 LIKE \'INDTAST2%\' AND A.NR1 = B.NR1 AND A.NR2 = B.NR2 AND A.ADATE >= SYSDATE AND C.NR1 = B.NR1 AND C.NR4 = B.NR4 AND D.NR3 = A.NR3 ORDER BY D.DINFO, C.CINFO, B.BINFO
Altså \'hoved\'-tabellen i join først, sådan at når B er fundet, så er det at finde A, C og D ret simple opslag.
Mulighed nummer 2 :
Jeg gætter på din Oracle kører med Cost-based optimizer. Hvis det er tilfældet, så skal du have alle 4 tabeller analyseret, så optimizeren har noget at gå efter :
ANALYZE TABLE ATABEL COMPUTE STATISTICS;
(Du kan bruge ESTIMATE i stedet for COMPUTE - det går hurtigere, men er ikke så sikkert)
Jeg har læst i MS documentationen et eller andet sted at de overholder SQL ANSI standarden - men det passer vel ikke :o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.