> in "batches" limiting the number of record with LIMIT r1,r2
Won't help. Instead, keep track of where you "left off" and do
WHERE id > $left_off ORDER BY id LIMIT 1000
Using InnoDB instead of MyISAM lets you have non-locking access.
Yes, doing the "reports" on a slave is a good idea.
The best is to build and maintain "summary tables". See
http://mysql.rjweb.org/doc.php/datawarehouse
http://mysql.rjweb.org/doc.php/summarytables
With summary tables, I can almost always arrange for "reports" to be built in "real time", that is, while the user is waiting for a web page to load.
> low priority
No viable (in my opinion).
> limit the cpu time
That is best done by not needing the CPU -- as is available with Summary Tables.
> limit the cpu time
Massive queries probably involve I/O more than CPU.