Skocz do zawartości

Optymalizaja php+MySQL


milkus

Rekomendowane odpowiedzi

Mam coś takiego

$result = mysql_query("SELECT * from slowa order by RAND() desc limit 25") or die(mysql_error());

Czyli pobieranie 25 losowych rekordów z bazy. Niestety przy dużej ilości zapytań, takie wywołanie staje się zbyt uciążliwe dla serwerów na których mieści się baza. Czy ktoś z Was wie, jak to można było by obejść, nie tracąc na funkcjonalności ?

Odnośnik do komentarza
Udostępnij na innych stronach

Można albo wylosować numer i pobrac rekordy pomiedzy LOS-10 i LOS+15,

Niestety nie można. Wyobraź sobie, że masz liczby od 1 do 100 w takiej tabeli. Wypada LOS=40: 30.31.32 ... 55, LOS=41: 31.32.33 ... 56.

Będzie to losowe? No właśnie ;)

Identyfikator ciągły a jeśli identyfikator jest używany jako klucz obcy to dodatkowe ciągłe pole + indeks. Wybieranie 25 pól po offset to kolejny problem z wydajnością.

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązałem to nieco inaczej niż proponowaliście, ale z góry dzięki za pomoc.

Ponieważ w bazie mam prawie 300K rekordów, to bezsensowne by było, ładowanie ich wszystkich do tablicy - zresztą po co skoro elementy są i tak losowane.

Zatem z bazy wybrałem losową ilość rekordów, które zostały zapisane w tablicy. Następnie z zapisanych danych losuję 25 elementów tablicy i wynik mam gotowy.

Wadą tego rozwiązania jest to, że istnieje prawdopodobieństwo wylosowania 2 lub więcej tego samego rekordu, oraz prawdopodobieństwo, że wylosuje się mniej niż 25 słów. Jednakże biorąc pod uwagę liczną zasobność bazy, wystąpienie którejkolwiek z wad jest mało prawdopodobne, a nawet jeśli to nie zostanie zakłócone działanie skryptu.

Teraz wszystko działa elegancko i nawet hostingodawca przestał marudzić.

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