Optimering af kode/metode
Okay jeg har et (synes jeg selv) rimeligt langt spørgsmål... here goes...Jeg er ved at skulle optimere på noget SQL / PL/SQL kode, og da jeg stort set ikke kender så meget til Oracle og dermed PL/SQL er jeg lidt i tvivl om hvilke muligheder jeg har...
Mit problem er at jeg har en tabel med eksempelvis ca. 6 millioner rækker hvor den ene af kolonnerne består af et tal (IP adresse) Jeg vil gerne behandle samtlige \"records\" med samme IP adresse med noget kode jeg har.
Lige nu foregår denne udvælgelse ved at der først konstrueres en cursor (hvis man kan sige sådan) indeholdende en række for hver unik forekomst af en IP adresse (\"SELECT DISTINCT... osv)
Herefter benyttes rækkerne fra denne cursor som WHERE betingelse (i en SELECT statement) til at danne en ny cursor kun med alle de rækker som indeholder noget med den pågældende IP. Således loop\'es der igennem for hver IP adresse.
Problemet er så at det tager enormt lang tid at foretage dette. Og jeg er ret sikker på at det er min SELECT nr 2 her som tager meget lang tid, da den jo skal piske samtlige 6 millioner rækker igennem for hver unik IP adresse.
Hvordan gøres dette hurtigere? (der er lavet index osv på IP kolonnen)
Jeg har en ide om at IP kolonnen skal sorteres f.eks stigende og at man dermed ikke er nødt til at løbe alle rækker igennem hver gang, men bare kan stoppe hver gang man når en ny IP... (dette ville også spare SELECT distinct tingen...)
Sorteringen af kolonnen kan jeg have ordnet allerede inden indsættelse i basen hvis det skal være, men hvordan får jeg skrevet noget PL/SQL kode som kan lave mit her ønskede gennemløb, som skal resultere i at man for hvert gennemløb får et \"recordset\" med alle ens IP adresser som man så kan udsætte for et indre loop... herefter næste recordset med IP adresser osv....
Jeg håber ikke at dette blev alt for kludret, selvom jeg godt kan se jeg har gentaget mig selv nogle gange osv.
På forhånd tak for hjælpen (og sig endelig til hvis jeg skal forsøge at forklare dele af dette bedre/ mere specifikt)