Hej!
Jeg er ved at lave en avanceret bruger søgning, som jeg gerne vil lave så effektiv som muligt.
For at simplificere det kan vi sige, at man kan søge på:
- køn (0 = hunkøn,1 = hankøn,2 = par)
- alder (0->99)
- bopæl (0 = jylland, 1 = fyn, 2 = sjælland)
Jeg ville altså lave tabellerne således (igen simplificeret):
tableUsers
- idUser
- strUsername
tableGenderToUsers
- idGender
- ridUser
tableAgeToUsers
- idAge
- ridUser
tableAreaToUsers
- idArea
- ridUser
Det er muligt at vælge f.eks. alle aldersgrupper, men kun søge efter folk i odense - hvilket gør det temmeligt ubrugeligt blot at lave en enkelt table med indexes. Derfor har jeg lavet index-tabellerne.
Mit spørgsmål er så - hvordan ville en effektiv SELECT sætning se ud, hvis man f.eks. ville hente:
- Alle brugere fra FYN med en alder mellem 20 og 60
- Alle HUNKØN i JYLLAND
Jeg har leget lidt med ideen om at lave en SQL sætning således:
SELECT tableUsers.* FROM tableUsers WHERE idUser IN(SELECT ridUser FROM tableGenderToUsers WHERE idGender = 2 AND ridUser IN(SELECT ridUser FROM tableAreaToUsers WHERE idArea IN(1,2)))
Men det ser blot ud til at dette databaseopslag er enormt langsomt, og en explain sætning viser da også at det langt fra er effektivt...
There - undskyld den lange stil - og jeg håber der er nogle der kan / vil hjælpe! Tusind tak