daniele, non credo che gli cambi molto usare una view, e probabilmente nemmeno creando indici aggiuntivi.
Dal momento che datav è nella tabella2, l'unico indice utilizabile dalla query sopra resta quello di user in tabella1. In tabella2 invece nessun indice può essere usato dal momento che vendono impiegate delle function che ne inibiscono l'uso.
Forse otterrebbe qualche incremento di prestazioni assegnando una cache specifica a tabella1 e tabella2, ma servirebbe sapere se possiede privilegi GRANT o meno.
Un'altra possibilità è il ricorso a una summary table dove tenere le singole righe, senza dati aggregati, che otterrebbe dalla query, ma siamo sempre solo nel cxampo delle ipotesi.
Ad ogbni modo, 100 sec. per processare diversi miliardi di righe (nella migliore delle ipotesi) non mi pare malaccio.