Avatar billede overchord Nybegynder
30. marts 2004 - 17:25 Der er 5 kommentarer og
2 løsninger

Optimering af beregninger i auto-genereret query

Hejsa

Detter er et lidt langhaaret problem som begynder at faa maerkbare konsekvenser paa et system som allerede er oppe at koere.
Jeg har distribuerede frontends (Access 97) som kan hente raa data fra en backend paa en server. Disse raa-data (counts) skal konverteres til enten Antal/Volume eller Antal per areal.
Konverteringen afhaenger af hvilket net er brugt til at tage proeven med (Sampler). Hvert net har to parametre som har effekt paa konverteringen til areal eller volume (Diameter og Efficieny).
Parametre for Sampler ligger i tabellen Samplers.
Jeg skal saa konvertere alle Counts ved at lave en beregning paa tabellen Zoo1 som indeholder en masse felter med counts samt et felt for "sampler" for hver post.
Indtil videre har jeg haft Public functions som hed AreaCalc og VolumeCalc der laver DLookup paa samplers-tabellen og henter diameter og efficiency paa denne maade. Den function kaldes saa fra en SQL-saetning:
SELECT [Dato], AreaCalc([Felt1]) AS Feltnavn1, AreaCalc([Felt2]) AS Feltnavn2, ......
Der er omkring 120 felter der indsaettes i paa denne maade (SQL-saetningen genereres gennem et script).
Men jo flere posts der kommer til i tabellen jo langsommere koerer det selvf. Problemet er at metoden nu er saa langsom at det ikke laengere er brugbart.
Saa mit spoergsmaal er:
- er det specielt langsomt at indarbejde functions i en SQL seatning?
- er der en metode hvormed jeg kan optimere koden saa jeg kan noejes med at holde raa data i backenden eller bliver det noedvendigt at lave f.eks en ugentlig beregning hvor data konverteres og indsaettes i en separat tabel.
Avatar billede overchord Nybegynder
30. marts 2004 - 18:07 #1
ok jeg er naaet et godt stykke af vejen selv

Istedet for at lave DLookup paa sampler tabellen henter jeg parametrene ind i et public array ved opstart. Det er tilsyneladende MEGET hurtigere at loebe igennem et array end at lave DLookUp.

Jeg lader spoergsmaalet staa lidt hvis der er andre forslag til optimering.
Avatar billede terry Ekspert
30. marts 2004 - 20:56 #2
Hi overchord!
Its not a good idea to use dlookup in complex queries, have you tried making nested queries? This should speed things up!
Avatar billede terry Ekspert
30. marts 2004 - 20:57 #3
Its not easy to give a precise solution without a better understanding of what you are doing exactly.
Avatar billede overchord Nybegynder
30. marts 2004 - 22:30 #4
Terry

Well yes i'm trying to make a calculation based on parameters from another table. However the "sampler" field only cahnges two or three times out of 350-1000 posts. So what i have done now insted of the DLookup is to load the Sampler table which only have ~ 7-10 posts into an array which is then checked for every calculation.
But i'm not 100% sure what you mean with nested query - could you give an example?
Avatar billede terry Ekspert
31. marts 2004 - 14:51 #5
It may be the wrong name I'm using but its just a nested (SQL) instead of a dlookup

SELECT V.Name, (SELECT TOP 1 Long FROM LOC L WHERE L.VID = V.VID ORDER BY L.report DESC) AS [Long], (SELECT TOP 1 Lat FROM LOC L WHERE L.VID = V.VID ORDER BY L.report DESC) AS Lat
FROM Vessel AS V;
Avatar billede overchord Nybegynder
31. marts 2004 - 21:00 #6
ok i see what you mean - thanks for the idea. I'll try to implement it and see whether it will improve performance more.
Avatar billede terry Ekspert
01. april 2004 - 19:04 #7
thanks, I think it should help.
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