Archief - [PROG]MYSQL MySQL 4 performance grote tabel

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

GizeH

Legacy Member
Hallo

ik heb een tabel met 10 miljoen rijen, waaruit ik random 10 rijen wil tonen uit gans die tabel (waar id parent !=0)

de structuur is:
id int
id_parent int
woord varchar(255)
sort_random (int)

ik weet dat ORDER BY RAND() slecht is op grote tabellen maar hoe los ik dit dan op?
ik kan niet where id > xxx AND id < xxx doen omdat er 'gaten' in de ids kunnen zitten, waardoor ik niet meer het juiste aantal rijen heb.
Bovendien is het niet echt random als ik zo zou werken omdat hij dan randoms gaat geven die meestal erg gelijkaardig zijn.

dit is wat ik probeerde:

SELECT id, woord FROM woord WHERE id_parent != 0 ORDER BY sort_random DESC LIMIT 10

ook deze query is niet haalbaar omwille van de veel te lange uitvoertijd...


Weet iemand hoe ik dit kan oplossen? of is mysql gewoon niet gemaakt om met zoveel data om te gaan?

dJeez

Legacy Member
Een mogelijke - simpele - oplossing zou zijn van een kolom toe te voegen met een random getal erin en daarop te sorteren (of is dat wat je sort_random nu doet?). En dan telkens je 10 rijen ophaalt de random waarde van die 10 rijen ook aan te passen, zodat er een nieuwe random waarde in staat (en je dus bij de volgende selectie in principe terug 10 random rijen zou moeten krijgen). Of dat ook daadwerkelijk een goede set aan data zal opleveren is een andere zaak, en zal grotendeels afhangen van de pseude random generator die gebruikt wordt (btw vergeet niet van dan de nodige indexes te leggen, dat zal sowieso snelheidswinst opleveren).

GizeH

Legacy Member
ORDER BY sort_random gebruik ik al.

waar moet ik dan een index op leggen? ik dacht dat ik het al geprobeerd had op sort_random zonder resultaat

killgore

Legacy Member
een index maken op sort_random (gaat u wel wat geheugen kosten).

Of gebruik maken van de hosttaal (dnno in hoeverre je sql procedures kan maken): random int creëren voor id, record opvragen en kijken of het wel degelijk bestaat en dit tot je er 10 hebt.

Zodra je gaat selecteren dan op een geïndexeerd veld (id) gaat dat vrij snel gaan.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan