Witam,
Posiadam bazę danych, która zbiera wyświetlenia filmu i wygląda mniej więcej w ten sposób
``ID ``File_id ``IP ``user_id `hit_time`
6143935 |
587 |
178.xxx.41.109 |
NULL |
2017-09-13 14:13:37 |
Zapytanie polega na tym, że sprawdza czy ten komputer (z takim ip) wchodziło na dane video w ostatniej godzinie jeżeli nie to dodaje wyświetlenie i insertuje nowy rekord. Tzn robię select ograniczony do 1 wiersza i szukam od tyłu, aż znajdzie ponieważ jest 100% że kolejny rekord będzie z późniejszą datą niż poprzedni.
Problem polega na tym, że w ciągu dnia może nazbierać się nawet kilka milionów rekordów i zapytanie zajmuje zbyt dużo czasu przy takich ilościach, szczególnie jak wchodzi ktoś kto nie był wcześniej w bazie. SQL przeszukuje wszystkie wyniki. Rozwiązaniem byłoby ograniczenie wyświetlenia wyników z ostatnich 60 min, bo wyświetlenia są nabijane co 1H. Tylko że WHERE tutaj nie wystarczy bo WHERE przeszuka wszystkie wyniki i pokaże te które pasują bo skąd MySQL ma wiedzieć że rekordy są ustalone według daty (każdy kolejny rekord ma późniejszą datę). Zastanawiałem się na HEAVING ale przy użyciu HEAVING zapytanie wcale nie trwa krócej.
Mam nadzieję, że zrozumieliście mój problem i znajdzie się jakaś dobra duszyczka, która pomoże.
Ps. Mówiąc prościej chce żeby mysql szukał od tyłu i przestawał wtedy kiedy 'hit_time' jest mniejszy o godzinę od obecnej godziny.