Hi Jonathan
If the process needs to run over 31+ Million records everyday, I think you'll find that that is just too much volume to run over.
I'd really look at what other rules you can apply to the start condition in order to make the processing effort less.
Also check the logs for any locking issues as this will also impact on the performance
Regards
Arden