それはあなたを遅くしているソートです。ランダムに並べ替えるのではなく、ランダムな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