Skocz do zawartości

[mysql] RAND vs IN id(x,x,x,x,x)


Kaviorek

Rekomendowane odpowiedzi

Temat chyba błahy dla wyjadaczy. Ja nie potrafię ocenić. Chciałbym pobierać losowe rekordy z bazy danych o wielkości rzędu 100k rekordów,

Które rozwiązanie jest wydajniejsze? tj. nie pogonią mnie z tej przyczyny z hostingu.

Czy zapytanie mysql z: ORDER BY RAND() LIMIT 0,4 - tak mam teraz,

Czy sobie za pomocą php wylosować liczby i wprowadzić je do zapytania: IN id(1,444,6666,34567)?

Jeżeli dwa jest lepsze, to w jakim stopniu? Jakaś znacząca różnica?

Jeżeli jest jeszcze innych sposób to poproszę.

Będę wdzięczny.

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązanie masz już podane na tacy. Pytałeś jeszcze w jakim stopniu IN będzie szybsze. Miałem raz przyjemność wytropić takiego potworka (order by rand) na tabeli, która miała kilkaset tys. rekordów i ciągle przybywało. Otóż do pewnego momentu nie było odczuwalne losowanie przez mysql, ale po przekroczeniu pewnej ilość rekordów okazało się, że MySQL zaczął tworzyć ogromne pliki tymczasowe, bo zaczęło brakować ramu. Efekt był taki, że wszystko nagle siadło na amen.

A tak całkiem z innej beczki, to nie zawsze liczenie rekordów metodą "select count(*) from tabela" daje poprawny wynik. Bodajże w Mysqlu, gdy użyjemy typu tabeli InnoDB, to wartość jest przybliżona. W niektórych bazach (chyba w FB, albo w Postgresie) z kolei takie polecenie wykonuje się sporo czasu na dużych zbiorach danych.

bnormalny.jpg

Tam daleko w Himalajach powiesił się słoń na trąbie.

Odnośnik do komentarza
Udostępnij na innych stronach

...Bodajże w Mysqlu, gdy użyjemy typu tabeli InnoDB, to wartość jest przybliżona...
jeżeli sprawdzasz count(*) bez warunków WHERE dla innoDB, to skanowany jest caly indeks/tabela. Natomiast myisam przechowuje ilość rekordów w danych tabeli.
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