Dám vám tu divoký odhad:Ukládání databáze do mezipaměti.
Při prvním spuštění stránky se dotaz neuloží do mezipaměti v databázi, takže to trvá déle, čímž vyprší časový limit PHP.
Jindy je dotaz mnohem rychlejší.
Dotaz můžete buď rozdělit, jak jste zmínili, nebo můžete zkusit zvýšit časový limit skriptu:
set_time_limit(0); //No time limit
set_time_limit(60); //60 seconds
Pro jistotu můžete použít toto Chcete-li vyčistit mezipaměť databáze a používat ji vždy, budete stránku vždy spouštět na čisté mezipaměti.