![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 1 Dołączył: 3.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Ponizej przedstawie (o po krotce opisze) pewna funkcje. Powoduje ona przeliczenie punktow zdobywanych przez graczy w cos na wzor ligi typerow. mamy zatem nastepujace elementy 'ukladanki' - gracze - rodzaj ligi - numer kolejki - zestawienie meczow - wyniki wytypowanwe przez graczy - punkty
Problem polega na tym, ze przy okolo 300 graczach, cala operacja trwa koszmarnie dlugo (2-3 minuty zanim strona zostanie odswiezona). Potrzebuje porady w jaki sposob zoptymalizowac funkcje aby dzialala szybciej. Jesli cos jest nie jasne albo potrzebujecie wiecej informacji, pytajcie... Dzieki z gory za pomoc Ten post edytował soska66 16.02.2009, 15:42:27 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
petla, w tej petli petla, a w tej petli zapytania....
Generujesz mase zapytan. Optymalizacja? Musisz zmniejszyc liczbe zapytan, co sie da pobierac jednym zapytaniem (a sie da) ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 1 Dołączył: 3.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
petla, w tej petli petla, a w tej petli zapytania.... Generujesz mase zapytan. Optymalizacja? Musisz zmniejszyc liczbe zapytan, co sie da pobierac jednym zapytaniem (a sie da) ![]() a mozesz jeszcze przyblizyc? ktore zapytania np... nie prosze o dokladny kod, bo nie jest moim celem pojscie na latwizne i metoda kopiuj wklej z forum ![]() Jak tak patrze to wydaje sie, ze fixtures moglbym wrzucic w jedno zapytanie z predictions (zapytanie z linii 35 bazuje na jednej tylko wartosci z tablicy fixtures). Linia 35 to jedno z dwoch zapytan w petli w petli... to faktycznie da sie uproscic.... ale funkcja getMarginScore() uzaleznia zapytanie od wynikow zapytania poprzedniego (wlasnie linia 35), wiec ona musi tam byc. Nie bardzo widze co moglbym zrobic z zapytaniami o punkty (pobieranie srednich, inserty itd). One sa wywolywane w ramach jednej petli (foreach users[]) i sa uzaleznione wlasnie od tej petlowanej wartosci user[] Ten post edytował soska66 16.02.2009, 16:13:19 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
nie mam czasu na dokladniejszą analize, ale to zapytanie:
$qry = "SELECT * FROM predictions WHERE fixture_id = ".$fixture["id"]." AND user_id = ".$user["id"].""; nie powinno byc w petli ktora jest w petli. zabijasz baze czyms takim. Zapewne bez wiekszego problemu powinno sie to uzyskac jednym zapytaniem. Do wykorzystania: - podzapytania i ewentualnie: - rzeczy grupujace: group by, sum, etc. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 1 Dołączył: 3.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Troche pozmienialem przez co skrocilem dzialanie funkcji do ok 20 sek (300 userow - 300 petli dczytujacych pierwsze zapytanie do bazy)
Zlozylem dwa zapytania z poprzedniego kodu w jedno, dzieki czemu nie wystepuje juz zapytanie w petli ktora jest w jeszcze jednej petli. Zmienilem tez dwa zapytania delete, insert na jedno update. Funkcja przedstawiona na koncu - updateUsersAvgScore - dodaje uzytkownikom, ktorzy nie brali udzialu w zabawie, usredniony wynik wszystkich userow, ktorzy grali. Dlatego musi ona wystapic na koncu i przefiltrowac ponownie userow (strzelam, ze okolo 10-20% tych 300 userow). Nie wiem jeszcze co mozna uproscic. 20 sek. przy 300 uzytkownikach (plus ta druga petla z okolo 30-40-oma) to wciaz troche dlugo... Da sie cos jeszcze z tym zrobic?
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 18:56 |