Avatar billede dougheffernan Nybegynder
27. februar 2006 - 09:55 Der er 10 kommentarer og
1 løsning

Forespørgsel ufattelig langsom

Systemet er lavet som en frontend i Microsoft Access, med en ditto backend. Nu er jeg så ved at portere til SQL Server tabeller, men er løbet ind i et performance problem.

Følgende stump kode tager forever and ever at køre når der er linket til SQL Server tabeller (1 min. 18 sek. pr. gennemløb) mens det kun tager ca. 1-2 sek. når der er tale om tabeller linket fra en Access database. Hvorfor?
Jeg HAR prøvet at re-linke SQL Server tabellerne, det hjælper ikke.

Set målerrst = dbs.OpenRecordset("Målere")
Set rst = dbs.OpenRecordset("SELECT * FROM Aflæsninger ORDER BY Måler,Dato,Klokkeslæt")
Set nyrst = dbs.OpenRecordset("Seneste aflæsninger")
målerrst.MoveFirst
While Not målerrst.EOF
  rst.FindLast "måler='" & målerrst!Måler & "'"
  'Bla Bla
Wend
Avatar billede dougheffernan Nybegynder
27. februar 2006 - 09:57 #1
Når der er tale om SQL Server tabellerne, ser koden sådan her ud:

Set målerrst = dbs.OpenRecordset("Målere", dbOpenDynaset, dbSeeChanges)
Set rst = dbs.OpenRecordset("SELECT * FROM Aflæsninger ORDER BY Måler,Dato,Klokkeslæt", dbOpenDynaset, dbSeeChanges)
Set nyrst = dbs.OpenRecordset("Seneste aflæsninger", dbOpenDynaset, dbSeeChanges)
ålerrst.MoveFirst
While Not målerrst.EOF
  rst.FindLast "måler='" & målerrst!Måler & "'"
  'Bla Bla
Wend
Avatar billede dougheffernan Nybegynder
27. februar 2006 - 10:25 #2
Ovenstående bruges til en rapport, som tager ca. 9 sek. at generere når der er tale om Access tabellerne, tør ikke engang TÆNKE på hvor lang tid det vil tage med SQL Server tabellerne! :(
Avatar billede dougheffernan Nybegynder
27. februar 2006 - 10:32 #3
Et lille mellemresultat viser at det med SQL Server tabellerne vil tage ca. 30 min. (ca. 200 gange langsommere!)!!!!!!
Avatar billede dougheffernan Nybegynder
27. februar 2006 - 10:57 #4
Hvis jeg ændrer , dbOpenDynaset, dbSeeChanges til , dbOpenSnapShot, bliver rapporten genereret på ca. 43 sek. (stadig ca. 5 gange langsommere!)
Avatar billede dougheffernan Nybegynder
27. februar 2006 - 13:35 #5
Kan man lave det på en anden måde?
Avatar billede arne_v Ekspert
27. februar 2006 - 14:29 #6
nu er jeg ikke saa skrap til den slags her

men bruger du DAO elelr ADO ?
Avatar billede dougheffernan Nybegynder
27. februar 2006 - 15:04 #7
Hmmm...DAO (der er i hvert fald ingen reference til Microsoft ActiveX Data Objects i References)

Et lidt andet spørgsmål, dog i samme program...følgende fungerer fint med Access som Backend, men ikke med SQL Server ditto:

    rst.FindFirst ("Not IsNull(Tæller)")
    If Not rst.NoMatch Then
      TællerStart = rst!Tæller
      rst.FindLast ("Not IsNull(Tæller)")
      If Not rst.NoMatch Then
        TællerSlut = rst!Tæller

Hvis der ikke er nogen poster i rst, kører "Access versionen" bare videre, mens "SQL Server versionen" kommer med en fejl:
Der er ingen aktuel post.
Avatar billede kristoffer_o Nybegynder
28. februar 2006 - 15:45 #8
Hvis du har mange rækker i tabellen og du ikke har indekseret noget kunne det måske være derfor
Avatar billede dougheffernan Nybegynder
02. marts 2006 - 11:58 #9
Ja, men det har jeg, et indeks på 3 nøgler. (både i Access og SQL Server tabellerne)
Avatar billede kristoffer_o Nybegynder
02. marts 2006 - 12:25 #10
Det lyder som om ham her har lidt af det samme problem:  http://www.mcse.ms/archive93-2004-8-931543.html

(Måske har du allerede læst det)
Avatar billede dougheffernan Nybegynder
22. november 2006 - 15:41 #11
Lukker spørgsmålet.
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
Computerworld tilbyder specialiserede kurser i database-management

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