Efektīva random lietas atlase MySQL
Atradu labu rakstu par to, kā labāk atlasīt nejaušus objektus datubāzē.
MySQL pieprasījumos funkciju izmantošana nav ieteicama, jo tās nevar kešot un to izpilde prasa papildus laiku. Tāpēc ierasto nejaušas lietas vaicājumu:
Ja visu tabulas ierakstu parādīšanās random atlasē nav kritiska, tad piemēram random bildītes atlasi tabulā kurā ir vismaz 1000 ierakstu var optimizēt līdz šādam kverijam.
MySQL pieprasījumos funkciju izmantošana nav ieteicama, jo tās nevar kešot un to izpilde prasa papildus laiku. Tāpēc ierasto nejaušas lietas vaicājumu:
SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
var efektīvi pārvērst šādā:$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `table` ");
$offset_row = mysql_fetch_object( $offset_result );
$offset = $offset_row->offset;
$result = mysql_query("SELECT * FROM `table` LIMIT $offset, 1 ");
Ja visu tabulas ierakstu parādīšanās random atlasē nav kritiska, tad piemēram random bildītes atlasi tabulā kurā ir vismaz 1000 ierakstu var optimizēt līdz šādam kverijam.
$random_bilde = mysql_query("SELECT * FROM bildes LIMIT ".rand(1,1000).", 1");
Komentāri