Cześć, mam mały problem z zapytaniami do bazy danych. Mam nadzieję, że pomożecie mi je zoptymalizować.
Problem polega na tym, że mając w bazie tylko 4 rekordy zużywam aż 18MB RAM na stronie głównej. W przyszłości może dojść do 30-40 wczytywanych rekordów per strona.
Tak wygląda struktura głównej tabeli:
Struktura tabeli relacyjnej (relacja one-to-one):
A o to akcja kontrolera strony głównej:
private $COLUMNS = ['id', 'name', 'motd', 'online_status', 'players_online', 'slots', 'version', 'icon'];
public function __invoke(): View
{
$serversPremium = Server::with('data:votes,id')
->whereHas('data', function(Builder $query) {
$query->where('premium', 1)->orderBy('votes', 'desc');
})
->get($this->COLUMNS);
$servers = Server::with('data:votes,id')
->whereHas('data', function(Builder $query) {
$query->where('premium', 0)->orderBy('votes', 'desc');
})
->paginate(20, $this->COLUMNS);
return view('index.sections.server.index', [
'serversPremium' => $serversPremium,
'servers' => $servers
]);
}
Wszystkie kolumny jakie wyciągam z tabel są wykorzystywane.
Rekordy premium i te "nie" premium są wrzucane do osobnych zmiennych, bo w widoku są wyświetlane w osobnych miejscach.
Troszkę w tych zapytaniach jest redundancji, wrzucę tam potem jakiegoś local scope'a, natomiast teraz dla przejrzystości jest to zrobione tak.