Попробуйте разбить запросы, возможно, вместо того, чтобы обрабатывать много данных за один раз, и обрабатывать меньшие партии, но чаще. Таким образом вы будете блокировать таблицы на меньшее время и позволять выполнять промежутки между запросами из внешнего интерфейса.
Другим решением будет обработка чаще, но даже в течение дня. В моем последнем проекте использовалась система событий, чтобы пользователь что-то комментировал, и это событие помещалось в очередь. Фоновый процесс (выполняемый из The Fat Controller) затем берет это событие и вставляет данные, чтобы все новостные ленты друзей пользователя были обновлены о комментарии. Таким образом, каналы обновляются с помощью простых операторов вставки, а не перестраиваются с нуля каждые x часов.
Что-то, что, возможно, могло бы помочь вам в повторении этих задач, - это проект, который я сделал и назвал The Fat Controller: http://www.4pmp.com/fatcontroller/
Он позаботится о многократном запуске скриптов, которые вы можете найти более подходящими, чем CRON. Посмотрите примеры использования на сайте.