Avatar billede Slettet bruger
19. maj 2005 - 16:30 Der er 2 løsninger

Kompleks Query

Jeg er ved at skrive en søge-algoritme til at finde reservedele til biler, men har nogle problemer, da min query har en cost på 55000 og derover...

SELECT c.id

FROM cars c


INNER JOIN car_cardatavalues ccdv1 ON ccdv1.car = c.id

INNER JOIN car_cardatavalues ccdv2 ON ccdv2.car = c.id

INNER JOIN car_cardatavalues ccdv3 ON ccdv3.car = c.id

INNER JOIN car_cardatavalues ccdv4 ON ccdv4.car = c.id

WHERE (ccdv1.field = 9 and ccdv1.number IN (38, 39, 40))

and (ccdv2.field = 32 and ccdv2.number IN (394, 391))

and (ccdv3.field = 6 and ccdv3.number IN (9, 10, 11))

and (ccdv4.field = 7 and ccdv4.number IN (28, 18))

Det er påkrævet at bilen har field 9 (reservedelsområde), enten er 38, 39 eller 40 samtidig med at bilen har en anden reservedelsområde, som er et udvalg af nogle  andre værdier...

Er det komplet sort snak det her, for jeg er noget forvirret. Efter hvad jeg kan se, kan jeg ikke blot komme af med at joine på hver gang jeg skal søge indenfor et nyt reservedelsområde.

På forhånd tak, Anders
Avatar billede kichian Nybegynder
21. maj 2005 - 08:53 #1
Umiddelbart ser det ikke ud til at det kan gøres meget anderledes.
Du bør nok have et index på car_cardatavalues (car, field) eller car_cardatavalues (field,number) for at øge hastigheden på din søgning.
Avatar billede Slettet bruger
03. juli 2005 - 20:55 #2
Okay, takker for dit input - har allerede indexes på de foreslåede kolonner - jeg gir dig halvdelen af pointene, da det alligevel var noget input :-)
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