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

INNER JOIN +ORDERBYを使用したファイルソートは避けてください

    すべてのフィルタリング作業をインデックスのみにアクセスするサブクエリに移動し(インデックスの操作は通常、他のデータの操作よりもはるかに高速です)、最も外側のクエリで残りのデータをフェッチすることで、MySQLオプティマイザを支援できます。

    SELECT posts.post_id,
           posts.post_b_id,
           posts.post_title,
           posts.post_cont,
           posts.thumb,
           posts.post_user,
           boards.board_title_l,
           boards.board_title
    FROM   (SELECT post_id
            FROM   posts
                   JOIN follow
                     ON posts.post_b_id = follow.board_id
            WHERE  follow.user_id = 1
            ORDER  BY post_id DESC
            LIMIT  10) sq
           JOIN posts
             ON posts.post_id = sq.post_id
           JOIN boards
             ON boards.board_id = posts.post_b_id
    

    ORDER BY posts.post_id DESCを省略していることに注意してください 通常、MySQLクエリを使用して並べ替えるよりも、コード内の最終結果を並べ替える方が高速であるため、外部クエリから(MySQLは filesort を使用することがよくあります)。 そのために)。

    P.S. followで一意のキーを置き換えることができます 主キーを持つテーブル。




    1. Androidルーム-すべてのテーブルのsqlite_sequenceをクリアする方法

    2. 致命的なエラー:オブジェクトコンテキストにないときに$thisを使用する

    3. php/mysqlの2つのテーブルからレコードを削除します

    4. SQLServerからメールを送信するときの「プロファイル名が無効です」を修正