2013-04-29 10 views
12

Czy to prawda, że ​​wydajność ORDER BY rand() jest bardzo powolna w porównaniu do innych rozwiązań? Jeśli tak, jakie są lepsze sposoby wybierania losowych wierszy z bazy danych?MySQL wybierz losowy wiersz - rand() wydajność

Moje zapytanie:

SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1; 
+3

To zależy od tego, jak dużo jest danych. Jak duży stół mówimy? – bestprogrammerintheworld

+0

To również zależy od tego, co dokładnie masz na myśli przez "losowy": czy potrzebujesz, aby każdy rekord był wybierany z takim samym prawdopodobieństwem? Czy też idealnie jednorodny rozkład nie jest konieczny? – eggyal

+0

5-10 000 wierszy. Pożądane równe prawdopodobieństwo. –

Odpowiedz

13

Tak, ORDER BY RAND() może być bardzo powolne w większych zestawów wynikowych.

Opcja jest sprowadzić resultset z tym stwierdzeniem (w tablicy):

SELECT sName FROM bpoint WHERE placeID=?; 

Potem - użyj array_rand($resultset) uzyskać randomizowane element z zapytaniem $resultset.

+2

A więc jest to funkcja php function array_rand() szybciej? –

+0

@JamaicaBob - to naprawdę zależy od tego, jak duży jest zestaw wyników. Ile wierszy masz w swoim binarnym stole? – bestprogrammerintheworld

+0

około 10.000 wierszy –