Вы не упоминаете, как часто это будет выполняться или нужно ли запускать его в течение определенного промежутка времени, поэтому не ясно, что производительность здесь даже является проблемой. «Медленный» сам по себе ничего не значит: процесс, который выполняется в течение 30 минут, может быть вполне приемлемым, если временное окно составляет один час.
Просто напишите самый простой и понятный код, который вы можете выполнить, и приступайте к работе. Если это выполняется в приемлемое количество времени, то все готово. Если это не так, то, по крайней мере, у вас есть чистое, работающее решение, которое вы можете профилировать и оптимизировать.