É a classificação que está atrasando você. Em vez de classificar aleatoriamente, basta selecionar um
product_db.unique_id aleatório Em sua consulta, substitua
ORDER BY RAND() com:AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
usando
>= em vez de = caso esse unique_id tenha sido excluído do banco de dados. Não é um resultado tão aleatório quanto a ordenação por rand, mas a consulta será executada muito mais rapidamente. Se desejar, você pode executar várias consultas com = até que um resultado seja encontrado e ainda pode ser bem mais rápido do que classificar todos esses resultados. Com um JOIN explícito seria:
SELECT product_db.image
FROM product_db
JOIN product_page ON product_db.unique_id = product_page.product_unique_id
WHERE product_page.page_id = 3
AND product_db.status = 'Online'
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
LIMIT 1