Gracias Casimiro! Normalmente es el principio que utilizo. De hecho aqui ya he planteado la parte donde creo que tengo el problema. Pero el procedimiento tiene otras complicaciones, aunque el cuello de botella lo tengo ahi.
La otra posibilidad que tengo es lo que comentaba de usar una tabla temporal, me implica mas cambios en la aplicación y antes queria agotar todas las posibilidades optimizandola. Pero gracias por el consejo, porque es la base para encontrar los problemas.