Mam kod, który aktualizuje mi dane na stronie ale wykonuje się on dosyć długo ze względu na złożoność operacji jaką musi wykonać. Postanowiłem podzielić proces na pare razy przy użyciu ORDER BY RAND() i LIMIT. Strona działa dwa razy szybciej, ale gdzie nie spojrzę ORDER BY RAND() jest krytykowane z każdej strony. W normalnym zapytaniu aktualizowane są dane około 150 elementów, przy rand dałem limit 25.
Drugą sprawę jest, że nie do końca rozumiem zapis tego kodu, dodałem komentarze tam gdzie wiem co się dzieję, a tam gdzie nie mam nadzieje że mi ktoś wyjaśni wtedy może będę miał możliwośc zrobienia czego samemu.
Kod:
//Pobieranie listy obiektów do aktualizacji $zap=array(1 => 'SELECT',2 => 'nazwa, limits',3 => 'FROM',4 => 'test_site', 5 => 'ORDER BY RAND() LIMIT 25'); $query = $db->zap($zap); { //Podejrzewam, że słuzy do zliczania, ale nie wiem jak to się odbywa - ktoś mógłby mi wyjaśnić. Jeśli nie do zliczania to do czego?? $sites [$row['nazwa']] = $row['nazwa']; $limits [$row['nazwa']] = $row['limits']; $count [$row['nazwa']] = 0; } $zap2=array(1 => 'SELECT',2 => 'site',3 => 'FROM',4 => 'test_sites',5 => 'WHERE ((status = "Approved") OR (status = "Pending"))'); $quer = $db->zap($zap2); { //Co sprawdza ten zapis? if (($count[$row2['site']] > $limits[$row2['site']]) && ($limits[$row2['site']] != '~') && ($limits[$row2['site']]!='') && ($limits[$row2['site']]!='0')) { //Przenosi obiek do kategorii LIMITED jeśli jest spełniony warunek powyżej tj. limit został wyczerpany np. 100/100 $zap3=array(1 => 'UPDATE',2 => 'test_site',3 => 'SET',4 => 'status="LIMITED"',5 => 'WHERE ((nazwa="'.$row2['site'].'") AND (status<>"SCAM"))'); $db->zap($zap3); } } //Aktualizuje licznik, który znajduje się w polu "refkow" do postaci ZZ/LL, gdzie ZZ - to zapisani, a LL - to limit $query2 = $db->zap($zap); { else $put = '0/'.$row2['limits']; $zap=array(1 => 'UPDATE',2 => 'test_site',3 => 'SET',4 => 'refkow = "'.$put.'"',5 => 'WHERE nazwa="'.$row2['nazwa'].'"'); $db->zap($zap); }
Struktura w bazie danych oraz nałożone indeksy:
test_site(lista obiektów do których można się zapisać):

test_sites(tutaj znajduję się liczone zapisy):
