10. september 2001 - 17:19Der 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).
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.
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!
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...
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!
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.
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 ;)
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
Synes godt om
Ny brugerNybegynder
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.