Avatar billede carstenandersen Nybegynder
08. november 2010 - 09:30 Der er 8 kommentarer og
2 løsninger

Minimere antal forespørgsler til mysql-database

Hej eksperter

Jeg er ved at minimere antallet af kald til databasen, da det nu er blevet for langsomt pga. databasens størrelse. Problemet er, at jeg for mange gange er nødsaget til at søge alle linier i databasen, hvilket må kunne gøres smartere. F.eks. er udtræk til menuen krævende. Først udtrækkes alle hovedsider, hvilket ikke kræver det store, men bagefter skal der tjekkes for hver enkel hovedside, om den skulle have en underside, hvilket jo kan give mange forespørgsler til databasen. Og det samme gentager sig for undersiderne !

Hvordan begrænser og styrer jeg bedst alle disse kald?
Avatar billede neoman Novice
08. november 2010 - 10:14 #1
Avatar billede carstenandersen Nybegynder
08. november 2010 - 10:19 #2
Jeg koder i asp, så linket var ikke helt til at forstå ;-) Link til en forklaring ved hjælp af asp-kode?
Avatar billede showsource Seniormester
08. november 2010 - 10:22 #3
Avatar billede carstenandersen Nybegynder
08. november 2010 - 12:00 #4
Det lyder svært. Er der nogle, som har et "alternativt" løsningsforslag?
Avatar billede neoman Novice
08. november 2010 - 12:07 #5
DU kan ikke krybe udenom det: enten anvender du "brute force" som nu, eller du er nødt til at gemme informationen på en smartere måde, og det er hvad begge de linkede artikler beskriver.

Svært er det ikke, det kræver bare lidt knofedt og omhu, og så kan du have en løsning kørende på en dag.
Avatar billede neoman Novice
08. november 2010 - 12:22 #6
Men: en gang i tidernes morgen brugte jeg selv en lidt anden teknik for at gemme hierarki - noget iblandet forward chaining:

Hver Parent havde et felt med ID på første Child (eller 0, ved ingen Children), og vist nok også et felt med ID på sidste Child

Hvert Child havde et felt med ID til næste Child (med samme Parent) eller 0 (ved ingen "søskende")

Og se referencerne til den artikel jeg linkede til: http://www.evolt.org/article/Four_ways_to_work_with_hierarchical_data/17/4047/index.html - her er i et indlæg (Submitted by regx on November 20, 2004 - 05:16.) beskrevet en metode som purister vil skyde ned, men som virker.
Avatar billede neoman Novice
08. november 2010 - 12:34 #7
Sådan helt OT:

Du gemmer vel i hver Child-record en ParentID - har du husket at få det felt indexeret?
Avatar billede carstenandersen Nybegynder
08. november 2010 - 13:09 #8
Har indtil nu ikke arbejdet med indexering, da det lyder til, at det fylder helt vildt og samtidig sløver ved update osv., men kunne være, at jeg skulle arbejde i denne retning.

Jeres indlæg har givet stof til efterretning - tak !

Smid begge et svar.
Avatar billede neoman Novice
08. november 2010 - 13:31 #9
"Fylder helt vildt"? Du har vel een update at sammenholde med måske visninger (=søgninge) i tusindvis, formentligt.  Prøv at sætte index på det felt (ved ikke hvordan man gør det i MySQL - måske kan en anden bidrage), og jeg vil gætte på, at dit langsommelighedsproblem formentligt er væk indtil du får umådeligt mange flere sider :-)
Avatar billede showsource Seniormester
08. november 2010 - 13:47 #10
Jahh, index er vel at bruge en "indholdsfortegnelse"
I stedet for at kikke hele bogen igennem, slås op på den bestemte side.

ALTER TABLE tabelnavn ADD INDEX ( feltnavn )
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