02. februar 2003 - 23:17Der er
21 kommentarer og 1 løsning
RAND() = Slow ??
I et select fra en tabel med små 600.000 rækker bruger jeg rand() for at hente 20 tilfældige. Problemet er bare at det tager ca. 50 sekunder og det er sgu for langsomt. Hvis jeg istedet ORDER BY navn så tager det 10 sek.
Der er omtrent 50.000 records der matcher.
Her er min sql SELECT navn, adresse, postnr, bynavn, email, web, telefon, telefax, kode1, kode2 FROM kobdata2 WHERE MATCH(kat1, kat2, kat3, kat4, kat5, kat6, kat7, kat8, kat9) AGAINST ('Anden landtransport Anden transportformidling Landtransport rørtransport Rørtransport Vejgodstransport') ORDER BY RAND() LIMIT 20
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
"You can't use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. In MySQL Version 3.23, you can, however, do: SELECT * FROM table_name ORDER BY RAND() This is useful to get a random sample of a set SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000."
Det vil ikke gøre den store forskel, darkstar. Alene udvælgelsen af de 50.000 relevante rækker tager tid. Mit forslag ville være et cron-job, der en gang om dagen eller en gang i timen udvælger ca. 1000 id-er med rand() - gemmer disse i en fil eller tabel. Og så udvælges de 20 derfra. Ikke supertilfældigt, men la'siggørligt
>erikc - Dit udemærkede forslag har jeg ikke tid til at implementere, løsningen skulle afleveres imorgen og det er først idag at jeg dinder ud af at enkelte søgninger tager så lang tid. Nu skal jeg bare finde ud af en omvej. Det var ikke for at være utaknemmelig!;)
>darkstar, tja nu må jeg jo indrømme at jeg ikk eved hvordan jeg skal lave et tilfældigt heltal i ASP. (pinligt)
1) Kig på msdn.microsoft.com og find random-funktionen (for selvfølgelig er den der). 2) Tag nogle forskellige tal, f. eks. klokkeslettet i sekunder og de sidste cifre i browserens IP-nummer og lav dem til æblegrød (noget med at gange og tage modulo bagefter).
>darkstar. Tja det halverede ca tiden havner omtrent de 30 sekunder. Det er desværre alt for langsomt, så jeg er nødt til at finde på en anden løsning. Jeg kommer nok til at undlade den rand() funktion hvis det er en søgning i denne størrelse.
Jeg takker mange gange for jeres indsats. Og Erik, du slipper :)
Jeg måtte ændre det sådan at hvis en bruger vælger mere end 3 kategorier, så sorteres der efter navn. Det drejer sig om ca. 4 ud af 2000 kategorier som brugeren kan søge i, så det går lige an.
Tak, da den var 2:30 så det hele fornuftigt ud og jeg gik i hi:)
Nej det syntes jeg egentligt ikke, men det var hvad det kunne blive til inden for det begrænsede tidsrum. (og økonomi!)
Men I skal have mange tak for hjælpen, det er fantastisk at kunne få så hurtig hjælp af dygtige mennesker.
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.