Bienvenido a los foros de Perl en español, gisulan.
Yo intentaría hacer todo el proceso en memoria.
Ya me he enfrentado con problemas así, y el hacer las consultas a la base de datos era el cuello de botella, porque se hacían millones de consultas.
Se probó también a realizar consultas SELECT con JOIN (varios JOIN...) y nada... el motor de base de datos tardaba un montón (en un maquinón IBM de nosecuántos Gb de memoria y *pocos* Ghz...)
El trabajo consistía en hacer consultas en tres bases de datos distintas, y encontrar información dispar para representar los resultados en una tabla Excel, como informe de errores de consolidación entre las bases de datos.
La solución fue sencilla: solo una consulta por cada base de datos para traer *toda* la información que nos interesaba mirar (solo los campos de cada registro que íbamos a comparar). Meter la información recuperada de la base de datos en estructuras
hash y
array (se elige uno u otro según fuéramos a acceder a la información de forma indexada o por clave). Y hacer que todo el trabajo de búsqueda y comparación lo haga la máquina.
Un PC normal, con 3Gb, a 2Ghz, procesó 3 millones de registros en poco más de veinte minutos.
Bueno, y eso porque estaba en Windows. Cuando lo pasamos a Linux tardó 6 minutos

Hace falta un poco más de información, para detallar un poco más.
Y si quieres contratarme (como dice pvaldes

) mándame un mensaje privado

Aunque *siempre* puedes preguntar aquí todo lo que quieras.