INNER JOINを使用すると、MySQLは通常、行数が最も少ないテーブルから開始します。この場合、テーブルfinishedで始まります savedで対応するレコードを検索します saved.emailのインデックスを使用する 。
LEFT JOINの場合、(一部の最適化を除く)MySQLは通常、レコードを順番に結合します(左端のテーブルから開始)。この場合、MySQLはテーブルsavedから始まります 、次に、finished内の対応する各レコードを検索しようとします 。 使用可能がないため finished.emailのインデックス 、ルックアップごとにフルスキャンを実行する必要があります。
編集
スキーマを投稿したので、MySQLがインデックス(finished.email)を無視していることがわかります。 )utf8から移動する場合 latin1へ キャラクターセット。各列の文字セットと照合を投稿していないので、テーブルのデフォルトの文字セットを使用します。 MySQLがインデックスを使用するには、照合に互換性がなければなりません。
MySQLはlatin1を強制(アップグレード)できます utf8までの非常に制限された照合 unicode_ciなどの照合 (したがって、最初のクエリはsaved.emailのインデックスを使用できます latin1をアップグレードする utf8への照合 )、ただしその逆は当てはまりません(2番目のクエリはfinished.emailのインデックスを使用できません utf8をダウングレードできないため latin1までの照合 。
解決策は、両方の電子メール列を互換性のある照合に変更することです。おそらく、それらを同一の文字セットと照合にすることで、最も簡単になります。