Đó là cách sắp xếp đang làm bạn chậm lại. Thay vì sắp xếp theo ngẫu nhiên, chỉ cần chọn một product_db.unique_id
ngẫu nhiên
Trong truy vấn của bạn, hãy thay thế ORDER BY RAND()
với:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
sử dụng >=
thay vì =
trong trường hợp unique_id đó đã bị xóa khỏi cơ sở dữ liệu. Không phải là một kết quả ngẫu nhiên như sắp xếp theo rand nhưng truy vấn sẽ thực thi nhanh hơn nhiều. Nếu muốn, bạn có thể chạy nhiều truy vấn với =
cho đến khi một kết quả được tìm thấy và nó vẫn có thể nhanh hơn việc sắp xếp tất cả các kết quả đó.
Với một JOIN rõ ràng, nó sẽ là:
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