Al igual que Myakire creo Maikiky que tu problema va en la consulta por más tablas que consulte no importa si pasa por muchas filas y columnas el tiempo que dices de 45 seg es demasiado creo que deberias ser mas especifico en el tema de la consulta por lo general las consultas cortas a la base de datos no son muy eficientes debes ser lo mas explicito posible y asi en vez de que el servidor se de mil vueltas por toda la base lo haga mas directo. Seria bueno que rebizaras la consulta que realizas y vee si la puedes optimizar.
Bueno eso lo otro de meter la query en una variable no puesto que si la consulta esta mal hecha seria hacer de nuevo el mismo problema y duplicado,