Avatar billede htm Nybegynder
10. juni 2003 - 11:23 Der er 15 kommentarer og
1 løsning

Hastighedproblemer med connection til MSSQL server fra ASP

Hej

Jeg har et problem - når jeg eksekverer min sql kan det sometider gå meget langsomt.

Min sql er dynamisk genereret, og kan have både LIKE og = blandet sammen! F.eks. søger jeg med LIKE på tekstfelter og = med på talfelter!

Med den ene sql-sætning kan jeg få 2000 records - med den anden kan jeg ikke få mere end ca. 630 - før jeg får følgende fejl:

Microsoft OLE DB Provider for SQL Server error '80040e21'

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

Et eksempel på en sql-sætning som giver ovenstående fejl:

SELECT tblFirma.*, tblPostnr.*
FROM tblFirma LEFT JOIN tblPostnr ON tblFirma.postnummer = tblPostnr.postnr  AND tblFirma.Land = tblPostnr.Land
WHERE tblFirma.DBstatus = 2
AND tblFirma.Saelger = 4
ORDER BY FirmaNavn

Men hvis jeg f.eks. søger med følgende: går det stærkt nok, og ingen fejl, selvom det returnerer ca. 2000 rækker!

SELECT tblFirma.*, tblPostnr.*
FROM tblFirma LEFT JOIN tblPostnr ON tblFirma.postnummer = tblPostnr.postnr  AND tblFirma.Land = tblPostnr.Land
WHERE tblFirma.DBstatus = 2
AND tblFirmaOplysning.Firmatype = 1
ORDER BY FirmaNavn

jeg connecter til databasen via:

Set rs = Server.CreateObject("ADODB.RecordSet")

strDSN = "Provider=SQLOLEDB;Data Source=server;Initial Catalog=tabel;User ID=bruger;Password=password;Persist Security Info=False"

rs.Open sql, strDSN ,1


Mine spørgsmål er så
1. Kan jeg lave noget om i min connection, for at eliminere denne fejl?
2. Er der noget opsætning der skal foretages på serveren?
3. Kan der været noget i de rækker jeg returnerer via den første sql-sætning, som kan lave ged i resultatet?
4. Hvordan kan jeg generelt optimere det hastigshedsmæssigt?
5. Vil det hjælpe at indexerer databasen, og i så fald hvordan gør jeg det, og hvad skal der index på?

Jeg kan lige nævne at der er cirka 6000 records i databasen, så det burde på ingen måde gå så langsomt!
Avatar billede janus_007 Nybegynder
10. juni 2003 - 11:34 #1
Du kan til at starte med navngive alle dine felter, istedet for .* notationen!, det burde afhjælpe problemet.

Du kan også connecte korrekt *S*, dvs. brug connection og command og slut af med RS...

Rent hastighedsmæssigt er der flere ting du kan gøre, men på 6000 rækker burde det ikke være videre interessant :O)
Avatar billede janus_007 Nybegynder
10. juni 2003 - 11:35 #2
Og ja... Så sføli sørge for at køre den nyeste MDAC !
Avatar billede erikjacobsen Ekspert
10. juni 2003 - 11:37 #3
Du får ganske mange rækker med  tblFirma.postnummer = tblPostnr.postnr 
Du skal som udgangspunkt KUN joine på primær- og fremmednøgler.

Et kursus i ordentligt databasedesign bør stå øverst på din ønskeseddel ;)
Avatar billede htm Nybegynder
10. juni 2003 - 11:57 #4
Janus_007>> Jeg vil prøve og smide feltnavnene på.

Jeg bruger Rs.close hvis det er det du mener? Jeg er ret ny i ASP verdnen så er ikke sikker på hvad du mener!

Nyeste MDAC - hvordan kan jeg se hvilken jeg kører med og hvad er den nyeste og hvor henter jeg den?

erikjacobsen>> Problemet er at jeg ikke selv har designet databasen, og der er data i tblFirma der enten ikke har noget postnummer, eller ikke har et postnummer der matcher den forespørgsel derfor bliver jeg nødt til at bruge JOINS på den!
Avatar billede erikjacobsen Ekspert
10. juni 2003 - 11:59 #5
Jeg læste forkert :)  tblPostnr.postnr  er jo nok en primærnøgle!
Avatar billede janus_007 Nybegynder
10. juni 2003 - 12:21 #6
Hent nyeste MDAC her: http://msdn.microsoft.com/library/default.asp?url=/downloads/list/dataaccess.asp

Læs om conn open : http://www.devguru.com/Technologies/ado/quickref/connection_open.html

og command:
http://www.devguru.com/Technologies/ado/quickref/command.html

hmm kan ikke lige huske hvordan du ser mdac versionen... :O| - men mon ikke det kan læses på MSDN.

Og ja den du joiner på er som den skal være ;O)  (som erikjacobsen også konstaterede), så det behøver du ikke tænke på!
Avatar billede janus_007 Nybegynder
10. juni 2003 - 12:22 #7
Her er et eksempel på connection open http://www.html.dk/tutorials/asp/lektion19.asp

de bruger dog ikke command objektet... men... det kan vise lidt..
Avatar billede htm Nybegynder
10. juni 2003 - 13:01 #8
Tak jeg vil kigge på det og vende tilbage!
Avatar billede htm Nybegynder
10. juni 2003 - 13:02 #9
Kan I give mig en præcis kode til hvordan min connection skal se ud? Er min OK eller ikke?
Avatar billede janus_007 Nybegynder
10. juni 2003 - 13:17 #10
Altså den virker jo, men du skal nok kigge lidt på hvordan du connecter når du skal fintune, der er som sagt ikke det store at hente, men hellere lave det ordentligt :O)

Set rs = Server.CreateObject("ADODB.RecordSet")
Set objConn = Server.CreateObject("ADODB.Connection")
Set objComm = Server.CreateObject("ADODB.Command")

strDSN = "Provider=SQLOLEDB;Data Source=server;Initial Catalog=tabel;User ID=bruger;Password=password;Persist Security Info=False"

objConn.Open strDSN
objComm.ActiveConnection = objConn
objComm.Text = sql
rs.CursorType = 1 ' adOpenKeyset
rs.Open

Det er den korrekte måde at gøre det på det er de færreste der følger det. Men du kan selv vælge hvad du vil jo ;O)


Og som sagt, din virker jo... så behold den hvis du er tilfreds! Det er ihvertfald ikke den der laver den fejl du omtaler.
Avatar billede htm Nybegynder
10. juni 2003 - 13:32 #11
Hmm ok mange tak so far. Jeg vil kigge på det, er lidt presset lige nu, men jeg kigger lige på det når jeg har 5 minutter sammenhængende ;o)

Hvad kan foresagde den fejlkode jeg nævnte?
Avatar billede janus_007 Nybegynder
10. juni 2003 - 13:40 #12
Højst tænkeligt dine feltnavne !
Avatar billede htm Nybegynder
10. juni 2003 - 18:12 #13
Jeg siger mange tak for hjælpen! Problemet skyldtes åbenbart at jeg hentede ud med * ;o)

Men hvorfor er der dette problem? Hvorfor er der så stor forskel?

Jeg plejer at bruge PHP sammen med MySQL selv, og her syntes jeg ikke der er dette problem?
Avatar billede janus_007 Nybegynder
10. juni 2003 - 20:04 #14
Tjaaa det er ikke lige til at vide, måske er det ADO'en der har nogle småbugs!
Avatar billede janus_007 Nybegynder
10. juni 2003 - 20:26 #15
Hovsa... Gider du at dele point ud?
Avatar billede htm Nybegynder
10. juni 2003 - 20:40 #16
Selvfølgelig gider jeg det - men ikke så hastig ;o) Ville lige have svar på det sidste

Du får point - og mange tak!
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