Del vino amo l'odore, adoro l'atmosfera e sopporto il sapore
Invernomuto
Lezioni di PHP
Chi mi cancella da facebook?

voodoo

Come fare a scoprire quali amici ti cancellano da facebook?
Ci pensa False Friends!

Vai all'applicazione False Friends fuori Facebook




PostHeaderIconOttimizzare Order By Rand() in Mysql per ottenere prestazioni migliori

Appunti - Sql

Quando si deve estrarre da una tabella Mysql un certo numero di record a caso, come quando ad esempio voglio mostrare tre foto della mia galleria a caso, si utilizza l'istruzione "ORDER BY RAND LIMIT tot" dove toto è il numero di risultati estratti che vogliamo. Questa operazione per tabelle molto grandi può diventare onerosa ed ha volte è meglio "scaricare" parte del lavoro al php, che ha notoriamente tempi di reazione più brevi di Mysql.

Normalmente scriveremmo:


SELECT username FROM user ORDER BY RAND() LIMIT 1

Per ottimizzare invece la procedura sfruttando il motore php potremo prendere il numero di righe dalla tabella interessata con una query utilizzando l'istruzione COUNT, fare un random tramite php sulla cifra trovata e poi chiamare gli elementi con query dirette utilizzando la posizione randomica nel LIMIT


$r = mysql_query("SELECT count(*) FROM user");
$d = mysql_fetch_row($r);
$rand = mt_rand(0,$d[0] - 1);

$r = mysql_query("SELECT username FROM user LIMIT $rand, 1");



facebook google live myspace stumbleupon twitter wikio yahoo