Skocz do zawartości

MySQL optymalizacja RAND()


yavaho

Rekomendowane odpowiedzi

@βασιλιάς

Nie wiem czy dobrze zrozumiałem, ale w Twoim rozwiązaniu jeżeli na "dzień dobry" dany rekord otrzyma przy insercie wysoki wynik RAND() powiedzmy 0.9... to nigdy potem nie zostanie "wylosowane"?

Dlaczego nigdy? Skoro rekord otrzymał jakąś liczbę, to tak samo można ją wylosować, bo jest z zakresu. Druga sprawa to dlaczego zakładasz, że im wyższa liczba, tym rzadziej się trafia? Przecież tym samym obalasz cały sens istnienia generatora pseudolosowego.

Odnośnik do komentarza
Udostępnij na innych stronach

Chryssalid, βασιλιάς napisał, że wybiera rekord o
o najmniejszym rand_index
stąd ja również mam wątpliwości do uczciwości takiej metody.

Sposób dobry tylko βασιλιάς źle go troszkę opisał - nadawany jest parametr rand (np. od 0 do 10) przy każdorazowym insert nowych danych do tablicy.

Teraz gdy chcemy pobrać losowe dane phpowy rand losuje liczbę z tego zakresu i pobiera powiedzmy 10 wyników z tablicy o takim rand_index jednocześnie nadając im nowy parametr rand updatem :)

Mnie tylko zastanawia czy taka metoda (w której występują 2 zapytania do bazy [ select + update ] ) jest efektowniejsza od jednego zapytania select .... order by rand() ??

iDir - skrypt na katalog stron lub firm - następca projektu SEOKatalog, dostosowany do dzisiejszych standardów, w pełni responsywny, na nowoczesnym frameworku.

Odnośnik do komentarza
Udostępnij na innych stronach

Mnie tylko zastanawia czy taka metoda (w której występują 2 zapytania do bazy [ select + update ] ) jest efektowniejsza od jednego zapytania select .... order by rand() ??
Sprawdź Sam.... Rand() przy niewielkich bazach działa bez problemu, ale przy większych np 100 tyś rekordów czas wykonania dochodzi do kilku ... nawet nastu sekund.

Jeśli operacje wstawienia i kasowania danych są wykonywane powiedzmy nawet raz na ok 10 minut można sposiłkować się dodatkową kolumną w tabeli z nadawanym kolejno numerem i odpowiednią procedurą która wykona select zainkrementuje jakaś zmienną i w instrukcji insert wstawi wartość w dodatkowej kolumnie. Potem już tylko losowanie w php liczb z zakresu od - do i proste wybieranie rekordów.

Sposobów na to jest całkiem sporo :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności