sql >> データベース >  >> RDS >> Mysql

MySQLは2つのテーブルからJOINを使用してランダムな行を選択します

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


    1. ネストされたクラス-CustomRowMapper!!もう問題ありません!! - パート1

    2. 存在しない場合のシーケンスの作成方法

    3. ユーザーが入力したテキストを効率的にサニタイズします

    4. SQLServerでの監査トリガーの作成