Това е сортирането, което ви забавя. Вместо да сортирате на случаен принцип, просто изберете произволен product_db.unique_id
Във вашата заявка заменете ORDER BY RAND()
с:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
с помощта на >=
вместо =
в случай, че този unique_id е изтрит от базата данни. Не толкова случаен резултат, колкото подреждането по rand, но заявката ще се изпълни много по-бързо. Ако желаете, можете да стартирате множество заявки с =
докато се намери резултат и все пак може да е доста по-бързо от сортирането на всички тези резултати.
С изрично JOIN би било:
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