Od kilku dni wszystko jest na linuxpl – udało mi się przenieść rozwiązania z MS-SQL-a na MySQL. Nauczyłem się, czego MySQL nie znosi, na czym się wywala, czym się różni składnia tej wersji języka od składni ogólnej. Najbardziej brakowało mi tego, że w MySQL-u nie ma w ogóle funkcji tabelarycznych (czyli funkcji, które zwracałyby nie pojedyncze wartości, lecz cały zestaw rekordów (z angielska nazywa się to DataSet). Brak takich funkcji zmuszał mnie do odwoływania się do tabel stałych, co po pierwsze jest znacznie wolniejsze, a po drugie wymaga odróżniania rekordów moich od nie moich… No ale najważniejsze, że wszystko jest i że działa!
Niestety nie działa tak, jak bym chciał – działa za wolno!
Pozostawiłem to, co napisałem na początek, ale dodałem dodatkowo wywołanie tej nowej procedury. Okazuje się, że ten nowy licznik gubi rekordy – i to różnice są znaczne. Np. dziś do tej pory nowy licznik odnotował 396 odwiedzin, gdy w tym samym czasie stary odnotował ich 513! A więc nawet to nie są pojedyncze rekordy, lecz 1/5 wszystkich rekordów!
MySQL nie ma takich narzędzi diagnozy, jakimi dysponuje MS-SQL, a ja nawet nie próbowałem prostych porównań z selektów z obu tabel, ale podejrzewam, że to jest tak, że jeśli ktoś wejdzie na stronę, zanim skończy się zapis rekordów poprzedniego wejścia, to te wcześniejsze wejście już nie zostanie w ogóle zapisane. Innymi słowy jest tak, że póki nie uda mi się skrócić czasu potrzebnego do zapisania rekordu odwiedzin, to mój nowy licznik do niczego się nie nadaje!
Pierwsze zmiany już wprowadziłem, ale te różnice, jakie podałem, są już po zastosowaniu tych zmian – potrzebne są dalsze. Najbliższy krok będzie polegał na zmniejszeniu liczby zapytań SQL-owych wywoływanych ze skryptu PHP. W tej chwili są aż 4 takie wywołania – zadeklarowanie zmiennych, wywołanie procedury rozpoznającej bloga, pobranie tych zmiennych ustawionych przez procedurę i dopiero jako czwarte jest wywołanie właściwej procedury. Przesunę wywołanie tej procedury rozpoznającej bloga do środka właściwej procedury, a w tej sposób skrypt PHP. Mam nadzieję, że to wystarczy, ale w zanadrzu mam jeszcze kilka pomysłów.
W każdym razie jeszcze to potrwa…