Jeśli mysql musi liczyć 11 milionów wierszy, tak naprawdę nie ma zbyt dużego sposobu na przyspieszenie prostego liczenia. Przynajmniej nie po to, by osiągnąć prędkość poniżej 1 sekundy. Powinieneś przemyśleć, jak liczysz. Kilka pomysłów:
-
Dodaj do tabeli pole automatycznego przyrostu. Wygląda na to, że nie usunąłbyś z tabeli, więc możesz użyć prostej matematyki, aby znaleźć liczbę rekordów. Wybierz minimalną liczbę automatycznego przyrostu dla początkowej wcześniejszej daty i maksymalną dla późniejszej daty i odejmij jeden od drugiego, aby uzyskać liczbę rekordów. Na przykład:
SELECT min(incr_id) min_id FROM record_updates WHERE date_updated BETWEEN '2009-10-11 15:33:22' AND '2009-10-12 23:59:59'; SELECT max(incr_id) max_id FROM record_updates WHERE date_updated > DATE_SUB(NOW(), INTERVAL 2 DAY);`
-
Utwórz kolejną tabelę podsumowującą liczbę rekordów dla każdego dnia. Następnie możesz wysłać zapytanie do tej tabeli, aby uzyskać całkowitą liczbę rekordów. Byłoby tylko 365 rekordów na każdy rok. Jeśli chcesz uzyskać bardziej szczegółowe czasy, zapytaj tabelę podsumowań o pełne dni, a bieżącą tabelę tylko o liczbę rekordów dla dni rozpoczęcia i zakończenia. Następnie dodaj je wszystkie razem.
Jeśli dane się nie zmieniają, a na to wygląda, tabele podsumowań będą łatwe w utrzymaniu i aktualizowaniu. Znacznie przyspieszą działanie.