30. marts 2004 - 17:25Der 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.
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.
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?
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;
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.