13. januar 2002 - 14:15Der er
14 kommentarer og 1 løsning
Optimering af MySQL ved læsning af store tabeller
Jeg har en tabel på ca. 65.000 records (ca. 14 MB). Der bliver udført nogle queries med LIKE på et tekstfelt, fra Apache/PHP og det får httpd-processen til at banke op på 99% CPU-tid.
Findes der en måde hvorpå jeg kan få MySQL til at indlæse og beholde tabellen i hukommelsen - er det KEY_BUFFER_SIZE der styrer det?
Jeg leder efter en parameter til mysqld, hvis det findes.
Det er en her-og-nu løsning. Jeg er igang med at lave nye queries og bedre indekser, men indtil da skal det gerne virke.
Du kan måske kopiere det hele til ram således: mysql_query(\"create temporary table if not exists tamtabel (felt1 int not null, felt2 text) type=heap\"); mysql_query(\"insert into ramtabel select felt1,felt2 from disktabel\");
Herefter kan du lave alle dine queries på tabellen i ram
Hvis du ikke opdaterer tabellen ret tit, men søger tit, vil jeg hellere anbefale dig det hack, at trække søgefeltet ud i en rå tekstfil, men id-nummer til posten, og have et lille Perl script til fritekst søgning. Det vil gå overraskende hurtigt:)
Jeg vil hellere have én til at slå græsplænen til sommer .... men lad gå
Er det koden bagved i PHP, C, eller .... der er noget i vejen med? De 65000 ligner alt for meget 2^16, så hvis du har et 16 bits tal uden fortegn, der får overløb, kan du få problemer. Jeg mener dog at alle tal i PHP, og Perl er 32 bits, så måske er det alligevel ikke det??
Det er bedre at bruge komma end && i første og tredie \"parameter\" til for-løkken. Så er man sikker på at begge udføres, og at man ikke pludselig havner i at den første er false, så den anden springes over. I anden \"parameter\" skal den være der, for det er et logisk udtryk. Altså:
Ja jeg har styr på indekser - fejlen ligger som sagt heller ikke i databasen.
Du har ret i det med komma - det havde jeg ikke selv set. Ovenstående kode bruges til at generere en \"bladre liste\" (du ved til søgeresultater hvor der vises 20 af gangen).
Men jeg vil ikke pille mere ved koden, jeg har selv lavet en stump, der virker bedre... ;-)
Erik -> Det er måske lidt OT, men kan du anbefale en god dansk lærebog i databaser?
Jeg skal muligvis undervise igen på Datanom uddannelsen i \"Databaser 1\", og den bog jeg tidligere har brugt er på engelsk og (ifølge mine kursister) lidt for avanceret.
Hør hov! Det var da vist nok også den jeg selv havde på datamatiker studiet! :-) Det havde jeg rent glemt, men det var også en fotokopieret udgave og den er vist i mellemtiden forsvundet.
Herligt! Den tror jeg hellere, at jeg må få købt. Jeg kan se på Amazon, at den nu også indeholder objektorienteret datadesign.
Det lyder som den rigtige - og den er der flere der bruger på Databaser 1. Den er ikke nem, men det skal den jo heller ikke være :)
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.