![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 54 Pomógł: 0 Dołączył: 9.09.2003 Skąd: Bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem z prędkością wykonywania zapytania. Cron uruchamia skrypt codziennie i jeżeli zajdą pewne warunki to przepisuje wartości z jednej kolumny do drugiej. W tabeli jest póki co ok. 37 tyś rekordów. Problem w tym, że przepisywanie trwa bardzo długo, tj. tylko 2tyś rekordów na minutę. Wydawało mi się, że taka nieskomplikowana rzecz powinna trwać parę sekund. Na początku myślałem, że to wina pythona, dlatego przepisałem to na php, ale wciąż to samo. Sam kod do przepisywania wygląda tak:
Całość wykonuje się na serwerach home.pl, więc nie powinno być dużych opóźnień. Co o tym sądzicie? Da się to jakoś przyspieszyć, czy taka "prędkość" to norma? Edit: Zmieniłem warunek po którym edytujemy wpisy z name na uid i... idzie o niebo szybciej. Taki głupi błąd :/ Ten post edytował Radek_1 1.09.2011, 20:32:16 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nie zrozumiałeś mnie, mysql_affected_rows() używamy, aby uzyskać liczbę rekordów zmienionych przez zapytanie z INSERT, UPDATE, REPLACE i DELETE. Inaczej nie możemy tej liczby uzyskać, bo powyższe zapytania nie zwracają żadnych rekordów.
Natomiast mysql_num_rows() możemy użyć, jeśli chcemy uzyskać liczbę rekordów pobranych za pomocą SELECT. Funkcja ta jest jednak wolna.
Akurat Twój skrypt to szczególny przypadek, w którym - jak widzisz - nie ma potrzeby sprawdzania za pomocą SELECT, czy użytkownik w tabeli time_online istnieje, wystarczy bowiem spróbować dokonać aktualizacji rekordu, a jeśli aktualizacja się nie powiedzie (mysql_affected_rows() zwróci 0) to będzie to oznaczać, że użytkownika o nazwie $name_p nie ma w tabeli time_online i trzeba go dodać. Odsyłam do manuala: mysql_num_rows(), mysql_affected_rows(). Cytat Skrypt wyszukuje wszystkich użytkowników na stronie i zlicza ich czas bycia online. Jeżeli użytkownik jest nowy, to dodaje go do czasu "obserwowanych", stąd ten INSERT. Nie zmienia to faktu, że lepiej do wyszukiwania użytkownika nadawałaby się kolumna UID aniżeli name, oraz że obie te kolumny powinny być unikalne i śmiało można nałożyć na nie indeksy, co przyspieszy nieco działanie skryptu. Ten post edytował mortus 4.09.2011, 09:24:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 15:39 |