Het is het sorteren dat je vertraagt. In plaats van willekeurig te sorteren, selecteert u gewoon een willekeurige product_db.unique_id
Vervang in uw zoekopdracht ORDER BY RAND()
met:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
met behulp van >=
in plaats van =
in het geval dat unique_id uit de database is verwijderd. Het resultaat is niet zo willekeurig als bestellen op rand, maar de query wordt veel sneller uitgevoerd. Als je wilt, kun je meerdere zoekopdrachten uitvoeren met =
totdat er een resultaat is gevonden en het kan nog steeds behoorlijk sneller zijn dan het sorteren van al die resultaten.
Met een expliciete JOIN zou het zijn:
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