Získání skutečně náhodného záznamu může být pomalé. Tento fakt se ve skutečnosti moc nevyřeší; pokud chcete, aby byl skutečně náhodný, pak dotaz musí načíst všechna relevantní data, aby věděl, ze kterých záznamů má vybírat.
Naštěstí však existují rychlejší způsoby, jak to udělat. Nejsou správně náhodné, ale pokud rádi vyměníte trochu čisté náhodnosti za rychlost, pak by měly být pro většinu účelů dost dobré.
S ohledem na to je nejrychlejším způsobem, jak získat „náhodný“ záznam, přidání dalšího sloupce do vaší DB, který je vyplněn náhodnou hodnotou. Možná osolený hash MD5 primárního klíče? To je jedno. Přidejte příslušné indexy do tohoto sloupce a poté jednoduše přidejte sloupec do ORDER BY
klauzule v dotazu a dostanete své záznamy zpět v náhodném pořadí.
Chcete-li získat jeden náhodný záznam, jednoduše zadejte LIMIT 1
a přidejte WHERE random_field > $random_value
kde náhodná hodnota by byla hodnota v rozsahu vašeho nového pole (řekněme například MD5 hash náhodného čísla).
Samozřejmě nevýhodou je, že i když budou vaše záznamy v náhodném pořadí, zůstanou ve stejném náhodném pořadí. Řekl jsem, že to byla obchodní dokonalost pro rychlost dotazů. Můžete to obejít tím, že je budete pravidelně aktualizovat o nové hodnoty, ale myslím, že to pro vás může být problém, pokud je potřebujete udržovat aktuální.
Druhou nevýhodou je, že přidání dalšího sloupce může být příliš náročné na to, abyste se zeptali, zda máte omezení úložiště a vaše databáze už má obrovskou velikost, nebo jestli máte přísné DBA, než budete moci přidat sloupce. Ale zase musíte něco vyměnit; pokud chcete rychlost dotazu, potřebujete tento sloupec navíc.
Každopádně doufám, že to pomohlo.