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

MySqlのWHEREステートメントでORを使用すると、実行が遅くなります

    はい、OR 多くの場合、パフォーマンスを低下させます。一般的な回避策は、UNIONを実行することです。 。あなたの例:

    SELECT  *
        FROM  `posts`
        LEFT JOIN  `teams_users`
                   ON (teams_users.team_id=posts.team_id
                  AND  teams_users.user_id='7135')
        WHERE  (teams_users.status='1')
    UNION DISTINCT
    SELECT  *
        FROM  `posts`
        LEFT JOIN  `teams_users`
                   ON (teams_users.team_id=posts.team_id
                  AND  teams_users.user_id='7135')
        WHERE  (posts.user_id='7135');
    

    重複がないことが確実な場合は、より高速なUNION ALLに変更してください 。

    不足しているteam_usersを探していない場合 行、JOINを使用 LEFT JOINの代わりに 。

    ORDER BYが必要な場合 、いくつかの親を追加します:

    ( SELECT ... )
    UNION ...
    ( SELECT ... )
    ORDER BY ...
    

    それ以外の場合は、ORDER BY 2番目のSELECTにのみ適用されます 。 (「pagination」も必要な場合は、私のブログを参照してください。 。)

    LIMITも必要になる場合があることに注意してください 特定の状況で。



    1. リレーショナルと非リレーショナルデータベース - パート1

    2. ユーザーのテーブルにID列が必要なのはなぜですか?

    3. カテゴリ階層(PHP / MySQL)

    4. SQLServerで壊れたオブジェクトを見つける