countriesiso2列にインデックスを付けて、次のように構造化されたテーブルがあります。

通常の選択クエリを実行すると、iso2 インデックスは正常に機能します。

しかし、iso2 で別のテーブルと結合すると、非常に奇妙な動作をします。

まず、NULLpossible_keys と表示されていますが、それでも使用していますか? 次に、テーブル全体である 256 行とも表示されます。大きな更新では実行が非常に遅いため、インデックスを使用していないことがわかります。ここで何が問題なのですか?
編集: また、idiso2 インデックスから列を取り出すと (最初の図を参照)、結合で使用されているインデックスはないと表示されます。
詳細情報: データを正規化し、 のcountry_id代わりに を使用しようとしていcountryます。でテーブルを更新していたcountry_idときに、非常に遅くなっていることに気付きました。いくつかの EXPLAIN によって、インデックスが使用されていないことがわかりました。多分それは iso2 が char(2) であることと関係がありますか?
私は次のようにcountry_idを入力していました:
UPDATE leads
LEFT JOIN countries on leads.country=countries.iso2
SET leads.country_id=countries.id
leadsこのクエリは、テーブルの約 10 万行に対して約 40 秒かかりました。