Avatar billede ostehamster Nybegynder
13. oktober 2008 - 17:03 Der er 4 kommentarer og
1 løsning

Optimering af database kald med joins

Hej

Jeg har en database som ikke er designet alt for heldigt, hvilket nu giver problemer.

Tabel A indholder >5000 rækker, og har to kolonner ref_B1 og ref_B2. ref_B1 og ref_B2 peger på forskellige rækker i tabel B, som har ~250 rækker.

Problemet ligger i, tror jeg, at sammenhængen mellem A og B er af typen varchar, og når jeg laver left join tager det en evighed at få resultatet frem.

Mit query er ala:
select `A`.*,
`AB1`.`name`, `AB2`.`name`
from `tabelA` `A`
left join `tabelB` `AB1` on `A`.`ref_B1` = `AB1`.`id`
left join `tabelB` `AB2` on `A`.`ref_B2` = `AB2`.`id`;

Er der en bedre måde at gøre dette på?

På forhånd tak
Christoffer
Avatar billede arne_v Ekspert
13. oktober 2008 - 17:08 #1
Hvis den query tager en evighed, så skyldes det sikkert manglende index'es !
Avatar billede arne_v Ekspert
13. oktober 2008 - 17:09 #2
Du skal have index på:

tabelB.id
tabelA.ref_b1
tabelA.ref_b2
Avatar billede ostehamster Nybegynder
13. oktober 2008 - 17:20 #3
Et par index's gjorde tricket ;)
Avatar billede ostehamster Nybegynder
13. oktober 2008 - 17:21 #4
Ahh, næste gang prøver jeg lige at opdatere inden jeg skriver noget :)

Men jeps, det hjalp gevaldigt.

Svar?
Avatar billede arne_v Ekspert
13. oktober 2008 - 17:26 #5
svar
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