Also ein Group By mit 30 Feldern ist schon ungewöhnlich.
Bei SQL's mit vielen Joins ist auch der Optimizer irgendwann überfordert und benötigt eben ewig.
Beschleunigen kann man das Ganze durch Zerlegung in Einzeloperationen.
Damit das Programm aber nicht generell umgeschrieben werden muss, kann man auch mit:

create table xxx1 as select ...
create table xxx2 as select ...
create table xxx3 as select ...

select * from xxx1 join xxx2 ... join xxx3 ...

ein wenig nachhelfen.