Large table random select with some peculiarity
First, ORDER BY RAND() will collect all the rows, tack on RAND(), sort, and then start work.

Actually, it is not that bad, since you have filtering.  But it may not help a lot.

AND id BETWEEN 1 AND 200000


limits the work to 200K instead of 800K.

The other filters involve what might be a terribly inefficient construct:  NOT IN ( SELECT ... ).  It may be turned into a different construct.  Please provide EXPLAIN SELECT  ...

DATE(added) = CURDATE()


Assuming added is DATETIME or TIMESTAMP, and there are not values in the future, then change to

added &gt;= CURDATE()


and have INDEX(added, id).

After I see the EXPLAIN, I may suggest using EXISTS or LEFT JOIN.