Avatar billede teepee Nybegynder
05. december 2003 - 13:35 Der er 6 kommentarer og
1 løsning

Hvordan deler jeg data op i mindre bidder?

Jeg har en tabel (Oracle 8i) med ca. 4.5 mill. rækker i, og den joines med 7-8 dimensionstabeller. Selecten indeholder en group by, der får processen til at sortere på diske og ikke i memory. Nu bliver jeg nødt til at dele processen op i 4-5-6 dele og tage en del ad gangen. Men hvordan får jeg delt mine data op, når mine id'er kan være temmeligt skævt fordelt. Jeg tænkte på noget modulus, men når 2/3 af rækkerne har samme id, så dur det ikke. Rownum sjov dur heller ikke, pga. min group by.
Avatar billede trer Nybegynder
05. december 2003 - 14:09 #1
Hvad med at lægge et indeks på de kolonner der indgår i din group by samt de felter du trækker ud?

Dermed vil arbejdet foregå i indekset og ikke i rådata. En stor del af sorteringerne vil heller ikke være nødvendige...

Du skal naturligvis så sørge for at statistikkerne opdateres jævnligt...
Avatar billede teepee Nybegynder
05. december 2003 - 14:24 #2
Har prøvet, men det tager for lang tid at lave indexet. Alle data er nye hver gang, det er en slags staging area tabel.
Avatar billede trer Nybegynder
05. december 2003 - 14:35 #3
Hmm... kan du ikke blot sætte lidt ekstra hukommelse til sortering af i din init.ora?

Ellers - hvis du kan finde det join-kriterie der skærer flest rækker af, så kan du understøtte det med indeks og via et hint tvinge optimizeren til at bruge det indeks. Måske kan du vinde noget der.
Avatar billede teepee Nybegynder
07. december 2003 - 11:22 #4
Bruger allerede ORDERED hint til at tvinge oracle til at tage tabellerne i passende rækkefølge. Kan kun allokere ca. 1 GB hukommelse til processen.
Jeg tror at jeg prøver noget HASH() partitionering og PARALLEL.
Avatar billede trer Nybegynder
07. december 2003 - 12:07 #5
Appropos hashing - Du har overvejet bitmap indexes? De burde være en smule hurtigere i opbygningen.

Umiddelbart tror jeg ikke, at parallelisme vil løse performance problemerne - i hvert fald ikke uden at introducere andre... eller kan man slå det til for en enkelt query i 8i?

Skidt - jeg tror jeg må give fortabt her :-)
Avatar billede teepee Nybegynder
08. december 2003 - 09:32 #6
PARALLEL er også et hint til optimizeren, så du kan styre hvor mange parallele processer du vil have, i.f.t. ressourcer til rådighed. Bitmapped indexes, tjah der er lidt snowflake struktur over tabellerne, problemet er bare at de i almindelig runtime bruges helt anderledes end til denne query, så jeg tror at det er overkill at ændre indexes (eller tilføje nye). Jeg må indrømme at jeg heller ikke selv har fundet løsningen.
Avatar billede teepee Nybegynder
08. december 2003 - 09:32 #7
Jeg lukker.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester