Procedure MySQL cursor taking a long time to execute
IN ( SELECT ... ) is often poorly optimized.  See if you can turn it into either a JOIN or EXISTS ( SELECT 1 ... )
Don't use a CURSOR if it is possible to write a JOIN or something to do the entire task rather than acting one row at a time.
PARTITIONing is unlikely to be beneficial; let's see the details.  (Composite indexes often do the job adequately.)
Remove the ORDER BY in subqueries; it has no effect.  If you need ordering, please elaborate; we should be able to find another way.
Are there parameters being fed in?  Which?