Det är sorteringen som bromsar dig. Istället för att sortera slumpmässigt väljer du bara en slumpmässig product_db.unique_id
I din fråga, ersätt ORDER BY RAND()
med:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
med >=
istället för =
om det unika_id har tagits bort från databasen. Inte ett lika slumpmässigt resultat som att beställa efter rand men frågan kommer att köras mycket snabbare. Om du vill kan du köra flera frågor med =
tills ett resultat hittas och det fortfarande kan vara ganska snabbare än att sortera alla dessa resultat.
Med en explicit JOIN skulle det vara:
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