Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Prosty COUNT i duży problem
Forum PHP.pl > Forum > Bazy danych > MySQL
markonix
  1. SELECT COUNT(*) FROM `views` WHERE `aid` = 1 AND `time` > 1425385685


Mam prostą tabelę INNODB.
`aid` INT
`time` INT
`date` DATE


W której przechowuje informacje o wizytach. Chciałbym pobrać liczbę wyświetleń z ostatnich X godzin np. z ostatnich 60 minut.
Niestety zapytanie jest za ciężkie i zawiesza mi serwer (wykonywane jest dość często).
Rekordów jest kilka milionów.

W jaką stronę iść? Czy indeksy coś dadzą (nie jestem w stanie tego łatwo testować bo każda zmiana struktury trwa bardzo długo, więc metoda prób i błędów tutaj się nie sprawdza)? Czytałem że inno słabo sobie radzi z COUNT :/
johny_s
indeksy zawsze pomagają na polach po których się szuka
dodaj sobie cache, chyba nikomu nie zrobi różnicy jak zobaczy dane sprzed kilkudziesięciu minut
markonix
Cache czego dokładnie? Użytkownikowi nie sprawi różnicy ale jeżeli reklama ma np. limit godzinowy 100 wyświetleń to musi mieć jednak dostęp do bieżących danych, a nie sprzed godziny.
johny_s
jeśli indeksy nie pomogą to zapisz wynik do memcache i odejmuj z memcache dopóki > 0 jak będzie 0 pobierz na nowo
markonix
Dodanie indeksu na time (na AID jest nałożony klucz obcy) powoduje przeciwny efekt przy COUNT jak i SELECT.
mmmmmmm
O indexach złożonych (np. dwukolumnowych) słyszał?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.