Generalnie dopóki nie sprecyzujesz dokładnie problemu to dyskutowanie o tym czy się da czy się nie da uzyskiwać odpowiedzi w czasie < 1 sek. jest bez sensu.
Nie znamy struktury ani rodzaju zapytań o jakich piszesz ale poteoretyzować można...
A jeśli zapytania są tak proste, że nie ma co optymalizować, indeksy są dodane do pól po których rekordy są wyszukiwane a cachowanie trochę nie pasuje, ponieważ dane co 5 minut są aktualizowane?
Najprawdopodobniej to znaczy, ze baza jest źle zaprojektowana robisz wyszukiwanie po stringach, brakuje kluczy itp... Dopóki nie przeszukujesz dużych pól tekstowych zwykłym "like" to kilka milionów rekordów nawet dla MySQL nie jest problemem i odpowiedzi powinny trwać ułamek sekundy.
Czy jest się wtedy skazanym na sekundowe, paru-sekundowe oczekiwanie na wykonanie zapytania?
Nie.
Co jeśli po roku tych rekordów będzie z 20 milionów?
To znaczy, ze po 5 latach ich może być 100 milionów i nadal nie powinno być problemu.
Czy w tak pojemnej tabeli przechowywać wszystkie rekordy czy może tylko ostatnie z 30 dni? A resztę trzymać w jakiejś innej?
A to zależy co chcesz osiągnąć, jakie są Twoje dane i jakie są cele projektu.
Też mnie ciekawi jak są strony, które mają ogrom statystyk (np. ceny kryptowalut z ostatnich lat). Jak to jest zrobione, że jest tak dużo danych i to się tak szybko ładuje?
Jeśli działa to sprawnie to znaczy, że są zrobione "z głową"" i w sposób przemyślany. Nie ma jednej ogólnej dobrej rady na wszelkie zagadnienia związane z dużą ilością rekordów.
Rekord rekordowi nie równy :-)
Mam bazę do której wpada mi po 400 rekordów na minutę (dziś) w szczycie sezonu dochodzi do 2000 ale na potrzeby prezentacji co 3 minuty tworzę agregaty które lecą do Elasticseracha.
Czym innym jest ujęcie statystyczne na potrzeby prezentacji a czym innym praca na ostatnich bieżących rekordach w celach analizy. Jednak korzystam z bazy często i zależy mi na tym żeby to śmigało. Dlatego w głównej tabeli mam same kolumny INT nawet adresy IP i domeny trzymam w osobnych tabelach a w głównej przeszukiwanej trzymam tylko klucze. Dzięki temu cała tabela jest dość mała i może sobie siedzieć w Cache (MySQL robi to sam). W chwili obecnej baza ma 3,6 miliona rekordów zajmuje niecały GB. Proste pytania na takiej tabeli to jakieś milisekundy:
W powyższym przypadku na swoje potrzeby nie potrzebuję wykonywać dalszych optymalizacji a nadal w ramach standardowego MySQL są dostępne opcje takie jak:
Gdyby była potrzeba to w dalszych etapach możemy skorzystać z dobrodziejst klastra: https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html
lub replikacji bazy i loadbalancingu.