On Sun, 13 Jan 2002 21:24:00 +0100, Svenne Krap <usenet@krap.dk>
wrote:
>>Men hvad gør man så hvis noget henad hver anden post er blevet
>>slettet? (Her går jeg så ud fra at 'id' bliver genereret med mysqls
>>auto_increment, som jeg ikke (længere) genbruger numrene)
>
>Bruger du ikke auto_increment ? fortæl, fortæl :)
en tastefejl.. fjern det lille 'jeg'.
>Hvordan slipper man af med det misfoster ?
Hvorfor mener du den er et misfoster? Den er da ikke anderledes end at
bruge en sequence til at give en unik fortløbende værdi, som man f.eks
gør i postgreSQL.
Jeg har testet lidt...
En tabel:
CREATE TABLE lots (
id int(11) NOT NULL auto_increment,
test char(35),
PRIMARY KEY (id)
);
blev fyldt med 110.000 tilfældige md5-hashes lavet med phps
md5(rand(0,9999999))
En
SELECT * FROM lots ORDER BY rand() LIMIT 1;
tager i omegnen af 2,2 sekunder.
Bruger man
SELECT *, rand() AS o FROM lots ORDER BY o LIMIT 1;
tager også i omegnen af 2,2 sekunder.
Mens en
SELECT * FROM lots ORDER BY test LIMIT 1;
kun tager i omegnen af 1,5 sekunder.
Selvom test også indeholder en tilfældig værdi som skal sorteres. Det
kan være det er selve kaldet af rand()-funktionen der tager den ekstra
tid, det vil jeg tro det er...
En
SELECT * FROM lots ORDER BY REVERSE(test) LIMIT 1;
tager ca. 2,75 sekunder, så at 110.000 kald til rand() tager ca 0,7
sekunder er vel ikke helt af vejen...
Sætter jeg så et index på 'test', og kører igen en
SELECT * FROM lots ORDER BY test LIMIT 1;
ja, så er det jo en helt anden snak.. nu tager det 0,01 sekund.
Det at lave en ORDER BY rand() er så vel ikke meget mere kraftsugende
end at sortere efter et hvilket som helst andet felt uden et index
på...
>Jeg er selv begyndt at kode MySQL igen efter godt to års pause og en
>af de største irritationsmomenter er auto_increment og mangel på
>subselects... :)
Jeg bruger lige for tiden postgreSQL men har stadig ikke haft brug for
subselects... men det er også kun webfnidder jeg leger med
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Directory Opus - nu også til windows -
http://www.gpsoft.com.au