countries
iso2列にインデックスを付けて、次のように構造化されたテーブルがあります。
通常の選択クエリを実行すると、iso2 インデックスは正常に機能します。
しかし、iso2 で別のテーブルと結合すると、非常に奇妙な動作をします。
まず、NULL
possible_keys と表示されていますが、それでも使用していますか? 次に、テーブル全体である 256 行とも表示されます。大きな更新では実行が非常に遅いため、インデックスを使用していないことがわかります。ここで何が問題なのですか?
編集: また、id
iso2 インデックスから列を取り出すと (最初の図を参照)、結合で使用されているインデックスはないと表示されます。
詳細情報: データを正規化し、 の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 秒かかりました。