MTJOSZJ

MTJOSZJ

Mindenkinek megvan a saját elfoglaltsága, amit programozás közben "csinál". Zenét hallgatunk, sorozatot nézünk, a TV megy a háttérben vagy csak szimplán rázzuk a lábunkat. Ezek közül mind megvolt vagy megvan nálam is.

Teljes bejegyzés
MySQL RAND()

MySQL RAND()

Elég sokszor van, hogy egy webshopnál, vagy weblapnál random sorokat kell lekérdezni adatbázisból. Addig nincs gond, míg pár száz vagy néhány ezer sorból kell válogatni. De mi van, ha több százezer sorból válogatunk? Ilyenkor már elég komolyan be tud lassulni a MySQL.

A legkönnyebb módszer random sorok lekérdezésére MySQL-ben az ORDER BY RAND().

SELECT col1 FROM tbl ORDER BY RAND() LIMIT 100;

Kis tábláknál nagyon jól működik, de nagyobb tábláknál már jelentős teljesítmény gondok lépetnek fel. Ez annak köszönhető, hogy a MySQL először minden sorhoz egy random számot generál, majd ezeket sorba rendezi.

Tehát, ha csak 10 random sort akarsz olvasni egy adatbázisból, melyben 100e sor van, a MySQL-nek a 100e sort először rendeznie kell, majd kiválaszt belőle 10-et.

Találtam egy megoldást, ami szerint a RAND a lekérdezés WHERE részében helyezkedik el és nem az ORDER BY-ban. Először is kell egy tört szám, ami össz sor számából és a limitből jön ki. Aztán pedig ezt használjuk a lekérdezés WHERE részében.

Teljes bejegyzés