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

左参加は内部参加を上回っていますか?

    LEFTJOINの実装がINNERJOIN+より多くの作業であると考える場合、この結果は混乱を招きます。 INNER JOINの実装が(LEFT JOIN +フィルタリング)の場合はどうなりますか?ああ、今は明らかです。

    クエリプランでの唯一の違いは次のとおりです。users... extra:using where 。これはフィルタリングを意味します。 追加のフィルタリング手順があります 内部結合を使用したクエリで。

    これは、where句で通常使用されるものとは異なる種類のフィルタリングです。このフィルタリングアクションをサポートするために、Aにインデックスを作成するのは簡単です。

    SELECT *
    FROM A
    WHERE A.ID = 3
    

    このクエリについて考えてみましょう:

    SELECT *
    FROM A
      LEFT JOIN B
      ON A.ID = B.ID
    WHERE B.ID is not null
    

    このクエリは、内部結合と同等です。そのフィルタリングアクションを支援するBのインデックスはありません。その理由は、where句が、Bの条件ではなく、結合の結果の条件を示しているためです。



    1. jdbcの不明なデータベース

    2. Mysqlリソースは一時的に利用できません

    3. Hibernateでの不要なクエリ-MySql

    4. PostgreSQLでこの時間の操作クエリを実行します