É 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