Te daré una suposición descabellada aquí:almacenamiento en caché de la base de datos.
La primera vez que ejecuta la página, la consulta no se almacena en caché en la base de datos, por lo que tarda más, por lo que expira el límite de tiempo de PHP.
El resto de veces, la consulta es mucho más rápida.
Puede dividir la consulta, como mencionó, o puede intentar aumentar el límite de tiempo en el script:
set_time_limit(0); //No time limit
set_time_limit(60); //60 seconds
Sin duda, podría usar esto para limpiar la memoria caché de la base de datos y usarla siempre, por lo que siempre ejecutará la página en la memoria caché limpia.