Pogledajte određenu poruku
Staro 04. 03. 2009.   #1
mega023
član
Certified
 
Avatar mega023
 
Datum učlanjenja: 05.11.2005
Poruke: 82
Hvala: 7
1 "Hvala" u 1 poruci
mega023 is on a distinguished road
Question random + mysql

Poznato je da order by rand() dosta spora fukcija, pa u zelji da je izbegnem trazim neko drugo resenje kako da iz tabele od par hiljada podataka, dobijem n random podataka (recimo da mi treba 20 random podataka).

R1
Prvo resenje koje se namece je da ucitam sve id-jeve u array, promesam ga i onda uzmem prvih (ili poslednjih) n i jedan po jedan izvucem iz baze. Ovo sve je n+1 upit (za gore pomenutih 20 podataka je 21 upit).

R2
sSledece resenje je da ovo gore (niz id-jeva) lepim sve sa "AND" u jedan upit koji ce imati recimo 20 "AND"-ova. Nikada nisam pravio neki test. Da li je ovakav upit sporiji od 20 pojedinacnih upita (select * from X where id=Y)?

R3
Sledece resenje je da da pomocu limita. Za ovo mi je potrebno da nema "rupa" (obrisanih podataka), ili da napravim drugo polje u tabeli koje ce biti "odrzavano" po brojevima (prilikom svakog brisanja da se numerise iz pocetka...). I ovo resenje takodje ima n+1 upta (odnosno 20+1 u nasem primeru, prvi da uzmemo max(id_2) i posle za svaki podatak posebno)

Postoji li neka (bolja) alternativa za rand() po mogucstvu da je brza i da vraca n radnom podataka u jednom upitu?
mega023 je offline   Odgovorite uz citat