Avatar billede kezzelski Nybegynder
31. august 2006 - 15:41 Der er 1 kommentar

Merging af store tables med vedholdende id

Hej eksperter

Jeg sidder og arbejder på et projekt, hvor vi er stødt på et performance problem. Vi har to tabeller med ca. 3 mio rækker i (med samme struktur). Den ene tabel er en gammel tabel der er relateret til andre tabeller via et id. Den anden er en ny tabel, hvor id'et er irrellevant. Jeg ønsker nu at merge dem på en sådan måde at alle rækker med værdi'er forskelligt fra dem i den gamle tabel (id'et undtaget) bliver tilføjet. Kort sagt ønsker jeg at værdierne skal forblive unikke.

Den mest åbenlyse fremgangsmåde er at lave et unikt index på værdierne samlet og bruge INSERT IGNORE. Dette er dog desværre en meget langsom proccess, som selv for små tables tager lang tid (der er omkring 8 kolonner som er strenge). Man kunne vælge at skabe dette index når tabellen er tom og publicere den, men denne process er lige så langsom.

Jeg har et par ide'er, men vil gerne undgå dem, hvis I har et bedre bud. Den første er at lave sql til at gennemgå de ca. 3 mio rækker hver for sig og derfor opdatere den gamle tabel lidt efter lidt. Jeg går ud fra at de ca. 6 mio. sql kald der skal til at checke og indsætte rækkerne tager meget lang tid, men i det mindste er denne metode let at bryde op i mindre dele.

Den anden er at lave en samlet key der består af kollonnerne concateneret. Den vil rellativt let kunne indexeres (ommen det nok også tager en rum tid. Desværre vil den fordoble pladsforbruget og være grum at redigere i.

Har i nogen bedre bud. Sig endelig til hvis i har brug for ekstra information!
Avatar billede gejlards Nybegynder
05. september 2006 - 14:32 #1
INSERT IGNORE er helt klart hurtigere end at lave midlertidige index. Bare sørg for at have optimeret memory indstillingerne til at match din tabel størrelse, så alt kan ligge i memory.
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