Avatar billede tq Nybegynder
10. september 2001 - 17:19 Der er 11 kommentarer og
1 løsning

Tælle records - effektivt

Hej Eksperter

Mht server-performance, hvad er den mest effektive måde at tælle records i en database?

Eksempel: -- Der var X poster der matchede din søgning, her er de: --

1. Ville det være mest relevant at lave et recordset og tælle det med recordcount (eks rs.recordcount)

2. Benytte SQL\'s \"SELECT COUNT(*) AS nr_of_records\" og bare execute denne SQL.

3. Eller en helt anden metode?

Jeg er simpelthen på udkig efter den løsning der er mest performance venlig for serveren (hvis der er en forskel).

Alt i alt er jeg meget interesseret i om hvorvidt det er bedst at bruge recordset\'s eller SQL til at udføre kommandoer overfor en database (SQL INSERT overfor rs.addnew osv osv).

På forhånd tak
Thomas
Avatar billede weje Nybegynder
10. september 2001 - 17:26 #1
Jeg ville nok altid lave så få forespørgsler hos serveren som muligt.
Count. Det er nok smartest at bruge rs.recordcount, da den tæller mens den laver recordset. Hvor imod hvis du count(*), laver du 2 sql....
Insert vs. addnew. Det kommer nok an på hvor mange du vil sætte ind. Hvis det kun er en record, ville jeg foretrække Insert. Men hvis det er mange på en gang ville jeg bruge addnew.

/Weje
Avatar billede burningice Nybegynder
10. september 2001 - 17:33 #2
jeg vil da mene at man skal holde sig vaek fra ADODB.RECORDSET i saa langt tid som overhovedet muligt.

Det er hurtigere at udfoere en SQL query i sit ADODB.CONNECTION object end at skulle oprette recordsette bare til det.
Det samme gaelder INSERT vs add.new

Kort og godt, brug saa faa objecter som muligt...

weje>> hvorfor har du den ide om at man udfoerer to sql ved en count?? forresten er det ikke smart, ydelsesmessigt, at lave en count paa det hele, count(felt) er bedre!
Avatar billede weje Nybegynder
10. september 2001 - 17:36 #3
Der var X poster der matchede din søgning, her er de.....
Så bliver man nødt til at tælle hvor mange records der vil komme. \"select count(*)...\" og derefter kører det man vil vise. ergo 2 sql...

/Weje
Avatar billede burningice Nybegynder
10. september 2001 - 17:44 #4
weje>> oh, det havde jeg ikke lige set, jo, det er rigtigt... men det vil stadigvæk være hurtigere end at oprette et helt object kun til formålet!
Avatar billede weje Nybegynder
10. september 2001 - 17:46 #5
Det er jo også derfor at jeg ville bruge rs.recordcount.???

/Weje
Avatar billede burningice Nybegynder
10. september 2001 - 17:50 #6
for at bruge recordcount må du oprette et ADODB.RECORDSET object, sql querys kan executes i den connection han allerede har lavet, og derfor kræver det ikke oprettelse af et object!
Avatar billede tq Nybegynder
10. september 2001 - 20:16 #7
Tak skal i ha\' guys, jeg må tilstå jeg helst vil holde mig fra recordsets hvis jeg kan bruge mine sql statements istedet.

Men, jeg bliver nødt til at spørge; er det FACT at sql statements er bedre performance-mæssigt i forhold til ADO\'s? Hvis muligt kunne én så smide en link eller lign. til nogle resourcer der evt omhandler det.

TQ
Avatar billede tq Nybegynder
10. september 2001 - 23:26 #8
Cyberfessor, du nævner det ikke er ydelsmæssigt smart at bruge COUNT(*) over COUNT(felt), men såvidt jeg ved (kan selvfølgelig tage fejl) så returnere COUNT(*) bare antalet af rows som query\'en giver og forøvrigt tæller COUNT(felt) ikke records (i det felt) med der har en tom værdi, så det skal man lige være opmærksom på.

Jeg er stadig MEGET interesseret i at høre nærmere om effektivitet mht at bruge SQL fremfor objects, hvis nogen tilfældigvis har noget info.

Jeg vil meget gerne give 200 point til den der kan pege mig til nogen læsestof omkring dette spørgsmål. Er forholdsvis vigtigt med en database der skal kunne håndtere queries, adds, updates og deletes på over 500.000 records ;)

TQ
Avatar billede burningice Nybegynder
11. september 2001 - 00:33 #9
tq>> sådan som jeg har forstået, kan selfølgelig tage fejl... uhm, lad os tage et eksempel

      Felt
Værdi   
      ID  bla  bla2  tik
      1    3    4      9
      2    4    7      6
      3    5    6      4

Ved en count(*) tæller den for hvert enkelt felt, dvs at Count(id) burde være 4 gange så hurtigt dan den kun tæller et felt og ikke alle fire

Det er ligesom at bruge Select * hvis man kun skal bruge id, så er Select id lidt smartere
Avatar billede burningice Nybegynder
11. september 2001 - 00:34 #10
det hedder vist rækker og ikke felt
Avatar billede zeptic Nybegynder
11. september 2001 - 09:15 #11
Jeg går ud fra at du koder i ASP, og så vil følgende links være gode at kigge på, da de ser på hvorledes man kan performe bedre med ASP.

http://www.verio.com/support/view_article.cfm?doc_id=560
http://www.webdevelopersjournal.com/articles/asp_performance.html
Avatar billede zeptic Nybegynder
11. september 2001 - 09:20 #12
Hvis du vil have effektivitet i dine sql-forespørgelser, så kan du ikke komme udenom stored procedures. Så vidt jeg ved behøver det ikke at være en statisk sql-forespørgsel du laver til en stored procedure, da stored procedures godt kan tage parametre (afhænger nok også af db).

Nedenstående artikel siger lidt om performance, og så har den en masse gode links til lignende artikler nederst på siden. Nok værd at kigge på.
http://www.15seconds.com/issue/000106.htm
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
Kurser inden for grundlæggende programmering

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