Una materialized view è solitamente usata in presenza di query dispendiose e dove non è fondamentale che i dati siano aggiornati in tempo reale. In un simile scenario sì, merita prendere in considerazione la soluzione di usare una table fisica da tenere aggiornata periodicamente attraverso triggers o eventi.

Non mi è invece chiaro quel commento sulle view che diventano pesanti quando sono richiamate frequentemente, direi piuttosto il contrario.

La cache conserva i risultati delle query in modo sequenziale (beh, più o meno, ma andremmo fuori tema) per cui l'ultima query servita viene messa in testa alla cache, e lo spazio necessario lo si recupera eliminando quelle via via più vecchie. Va da se quindi che le query che vengono eseguite più spesso avranno più probabilità di essere presenti nella cache, evitando così la scansione fisica delle tabelle o degli indici.