È lo smistamento che ti sta rallentando. Invece di ordinare in modo casuale, seleziona un product_db.unique_id
casuale
Nella tua query, sostituisci ORDER BY RAND()
con:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
usando >=
invece di =
nel caso in cui unique_id sia stato eliminato dal database. Non è un risultato casuale come l'ordinamento per rand, ma la query verrà eseguita molto più velocemente. Se lo desideri, puoi eseguire più query con =
fino a quando non viene trovato un risultato e potrebbe essere comunque molto più veloce dell'ordinamento di tutti quei risultati.
Con un JOIN esplicito sarebbe:
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