Optymalizacja zapytań do baz danych

Jan 08

Ostatnio rozmyślałem nad optymalizacją struktury i zapytań do baz danych. Moim zadaniem było (i nadal jest) wysłąnie powiadomień użytkownikowi, co dzieje się z jego profilem.

Wysłanie prostego powiadomienia to zwykłe przypisanie wiadomości do jego ID, natomiast gdy wysyłamy powiadomienia np o dodanym przez naszego przyjaciela materiale, nie będziemy przecież wysyłać po 1000 rekordów tylko po to, żeby każdy przyjaciel otrzymał informację. Robimy to w inny sposób: nadajemy ownera (notice_owner) powiadomienia na 0 i ustawiamy dodatkowe pole notice_self na 1. To oznacza, że powiadomienie tyczy się wszystkich użytkowników, którzy mają daną osobę w znajomych (stąd owner 0). Pole unotice_user informuje na temat kogo jest powiadomienie, a pole notice_type (int 2) nadaje numerek typu powiadomienia

[ struktura takiej bazy ].

Pora za zapytania. Najlepiej jakby wykorzystać wszystkie klucze zawarte w tabeli. Trzeba by było wykonać 2 zapytania, które zaznaczyłyby wszytskie rekordy. Z pomocą przychodzą nam unie [ zobacz zapytanie ].

Drugi sposób. Zamiast rozdzielania warunków na 2 zapytania możemy połączyć go w jeden operatorem OR. I tutaj jest problem. Jakiego bym klucza nie zrobił, żaden nie zostanie użyty [ zobacz zapytanie ].

Zdania są podzielone co do używania obu sposobów. Zadałem już pytanie na forum.php.pl, jednak nikt nie pokusił się na nie odpowiedzieć.

No nic, problem będzie nękał mnie nadal, aż przejdę do testów na sztucznie stworzonej bazie danych.

Leave a Reply