mysql_query armazena em buffer todo o conjunto de resultados na memória php. Isso é conveniente e geralmente muito rápido, mas você está enfrentando uma desvantagem.
mysql_unbuffered_query () existe. Ele não pega todo o conjunto de resultados de uma só vez. Ele pega pequenos pedaços de cada vez quando você busca linhas do conjunto de resultados.