To sortowanie Cię spowalnia. Zamiast sortować losowo, po prostu wybierz losowy product_db.unique_id
W zapytaniu zastąp ORDER BY RAND()
z:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
używając >=
zamiast =
w przypadku, gdy unikalny_id został usunięty z bazy danych. Nie tak losowy wynik, jak zamawianie według rand, ale zapytanie zostanie wykonane znacznie szybciej. Jeśli chcesz, możesz uruchomić wiele zapytań za pomocą =
dopóki nie zostanie znaleziony wynik i nadal może to być znacznie szybsze niż sortowanie wszystkich tych wyników.
Z wyraźnym JOIN byłoby to:
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