Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Spadająca wydajność zapytania.
Forum PHP.pl > Forum > Bazy danych > MySQL
Juzek
Witam.

Mam w pętli wywoływanie zapytanie:
  1. SELECT
  2.  
  3. `visits`.`v_id`,
  4. `visits`.`photos_p_id`,
  5. `visits`.`v_ip`,
  6. `photos`.`users_u_id`,
  7. `photos`.`photos_types_pt_id`
  8.  
  9. FROM `visits`
  10. INNER JOIN `photos` ON visits.photos_p_id = photos.p_id
  11. WHERE (visits.v_cookie = 1) AND (visits.v_proxy_headers = 1)
  12. AND (visits.v_image = 1) AND (visits.v_user_id IS NULL) AND (visits.v_value IS NULL)
  13. LIMIT 5000;


Dalej leci skrypt php nadający wartość visits.v_value na inną niż NULL dla każdego wpisu po jego v_id.
Mimo zmniejszającej się ilości wierszy z visits NULL czas zapytania wzrasta.
Tabela zawiera 8640000 wpisów.
Na czas trwania skryptu z powyższym zapytaniem, nie dochodzą do tabeli nowe wpisy.
Wzrost czasu wynosi średnio 0.8 sekundy na każde 5000 wpisów.
W przypadku pierwszej iteracji (8640000 wierszy v_value NULL) skrypt wykonuje się średnio 0.5 sek.

Ktoś ma pomysł dlaczego tak się dzieje i jak przepisać zapytanie by czas jego wykonania nie wzrastał ?
bpskiba
Zobacz coś takiego (pisane z ręki)

  1. SELECT * FROM
  2. (SELECT
  3. `visits`.`v_id`,
  4. `visits`.`photos_p_id`,
  5. `visits`.`v_ip`
  6. FROM `visits`
  7. WHERE (visits.v_cookie = 1) AND (visits.v_proxy_headers = 1)
  8. AND (visits.v_image = 1) AND (visits.v_user_id IS NULL) AND (visits.v_value IS NULL)
  9. )AS wizyty
  10. INNER JOIN `photos` ON wizyty.photos_p_id = photos.p_id


Powodem tej sytuacji jest przepełnienie któregoś bufora silnika mysql. Jeżeli masz dostęp do serwera odpal skrypt
https://raw.githubusercontent.com/major/MyS...r/mysqltuner.pl
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.