SQL outer joinは外部結合 結合カラムの選び方でパフォーマンスが劣化する
  • facebookページ
  • twitterページ
  • 2020.05.30

    SQL outer joinは外部結合 結合カラムの選び方でパフォーマンスが劣化する

    SQLのouter joinについてまとめてます。

    outer joinは外部結合 結合条件次第でパフォーマンス劣化の可能性あり

    外部結合とは、left側のテーブルに対応するデータがない場合もNULL値としてデータを取得する結合方法です。

    以下のSQLは、employees(社員)テーブルとdept_emp(部署・社員紐付けテーブル)をemp_no(社員番号)でouter joinし、さらにdepartments(部署)テーブルとdept_no(部署番号)でouter joinするSQLです。

    存在しない部署番号を持つ社員データを追加して、取得できるかどうか試してみましょう。

    以下の通り、対応するdepartments(部署)テーブルのレコードがなくてもデータを取得できました。

    【関連記事】
    SQL 外部結合サンプルコード 3テーブル結合とパフォーマンス比較

    outer joinは、left側のデータを問答無用で全件取得するため、ケースによっては遅いクエリになりやすいので注意が必要です。

    例えば、where句でインデックスのついていないカラムを指定した場合は、実行速度が10倍以上違ってきます。

    1つ目のSQLの実行時間は0.00sec、2つ目は0.14secで速度は14倍違います。explainを実行して実行計画を確認すると、後者はtype=ALL、key=NULLのテーブルフルスキャンを実行していることがわかります。

    クエリの速度を改善するには、where句で使用しているカラムにインデックス付与するなどの対策が必要です。

    まとめ

    ポテパンダの一言メモ
    • outer joinは、left側のテーブルを全件取得するjoin。値がない場合はNULLとなる。
    • whereの条件次第で大きく速度が落ちることがある。
    • 件数が多いテーブルの場合は、explainで実行計画を確認しindexを付与するなどの対策をする。

     



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE