25. juni 2003 - 08:54Der 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.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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...
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.
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
Synes godt om
Ny brugerNybegynder
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.