Det er sorteringen, der bremser dig. I stedet for at sortere efter tilfældigt skal du blot vælge en tilfældig product_db.unique_id
I din forespørgsel skal du erstatte ORDER BY RAND()
med:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
ved hjælp af >=
i stedet for =
i tilfælde af at det unikke_id er blevet slettet fra databasen. Ikke så tilfældigt et resultat som at bestille efter rand, men forespørgslen vil udføres meget hurtigere. Hvis du ønsker det, kan du køre flere forespørgsler med =
indtil et resultat er fundet, og det stadig kan være ret hurtigere end at sortere alle disse resultater.
Med et eksplicit JOIN ville det være:
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