Avatar billede bjornhart Nybegynder
25. juni 2003 - 08:54 Der er 6 kommentarer og
2 løsninger

Optimering af SQL-kald

Hej Eksperter

Jeg er ved at lave et katalog over en masse maskiner. Når jeg laver kører siden som skal vise disse maskiner, synes jeg det går lidt langsomt. Strukturen i databasen er som følger:
Tabeller:
  Kategori
  Gruppe
  Materiale

Relationer:
Et Materiale tilhører en Gruppe, en Gruppe tilhører en  Kategori.

asp-koden jeg bruger til at vise det på min side er (ikke komplet men jeg håber i kan se ideen):

Sql = "Select * from kategori"
Kategori.Open SQL, "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath, 3,1
do while Not Kategori.Eof

Sql = "Select * from gruppe where kategori="&Kategori("id")
Gruppe.Open SQL, "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath, 3,1
do while Not Gruppe.Eof

Sql = "Select * from materiale where gruppe="&gruppe("id")
Materiale.Open SQL, "DRIVER={Microsoft Access Driver (*.mdb)}; " & DBPath, 3,1
do while Not Materiale.Eof

loop (Materiale)
loop (Gruppe)
loop (Kategori)

Jeg laver altså 3 løkker der kører inden i hinanden, men er det smart? Hvis nej hvordan skal jeg så gøre.

På forhånd tak for feedback
Avatar billede jpvj Nybegynder
25. juni 2003 - 08:57 #1
SELECT * FROM Kategori, Gruppe, Materiale WHERE Materiale.id=Gruppe.materiale_id AND Gruppe.id = Kategori.gruppe_id

evt. kan du slutte med en sortering ved at tilføje: ORDER BY feltnavn
25. juni 2003 - 08:58 #2
Hvad er formålet med at loop'e gennem alle 3 recordsets? Kan du forklare lidt nærmere, hvad du gør med dataene...?
Avatar billede bjornhart Nybegynder
25. juni 2003 - 09:03 #3
Jeg vil vise alle de materialer som ligger under de respektive kategorier, og grupper. Derfor looper jeg igennem alle 3 recordset. Dvs. jeg kigger i kategorien, og ser om der er nogle grupper tilknyttet den. Derefter kigger jeg i gruppen, og ser om der er nogle materialer tilknyttet den. Hvis der er det skriver jeg dem ud.
Avatar billede jpvj Nybegynder
25. juni 2003 - 09:06 #4
Ups... med min løsning får du kun de kategorier der også har en eller flere grupper tilknyttet OG hvor gruppen har et eller flere materialer tilknyttet.

Hvis du har kategorier uden grupper eller grupper uden materialer, skal vi lige lave noget andet...
Avatar billede bjornhart Nybegynder
25. juni 2003 - 09:14 #5
Det er i princippet ikke relevant at skirve kategorier eller grupper ud, hvis der er ikke er nogle materialer tilknyttet kategori/gruppe relationen.
Avatar billede bjornhart Nybegynder
25. juni 2003 - 09:21 #6
->jpvj
Er der meget performance at vinde ved at bruge dit sql forslag?
25. juni 2003 - 21:52 #7
Helt klart! Det er den 'rigtige' måde at gøre det på.
Samtidig er det jo bare en forespørgsel, så du kan uden problemer vise den i en formular eller en rapport.
Avatar billede jpvj Nybegynder
26. juni 2003 - 13:16 #8
bjørnhart> Ja, det er der. Når man laver et SQL query, håndteres dette af DBMS (DataBase Management System). DBMS skal helst kunne optimere det, så det udføres hurtigts muligt. Det vil i ALLE tilfælde være meget hurtigere på denne måde, end selv at loope gennnem alle records, da der her skal sendes et query for hver eneste række. Dette query skal så optimeres og udføres af DBMS og rækken returneres før der atter sendes et query.

JP
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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