私はカテゴリテーブルの外部キー制約が定義されてMySQLの外部キーインデックス
(InnoDBエンジン)上の外部キーCATEGORY_IDを持っているMySQLのテーブルの製品を使用しています。
私は、category_id = 1の製品からEXPLAIN SELECT *を実行すると気付きました。
それは外部キーを使用していますので、私はタイプ=レンジとキーを参照してください。my_foreign_key
をしかし、私は(1,10)はCATEGORY_ID製品からSELECT * EXPLAIN実行すると、
フルテーブルスキャンを使用します。type = ALL、Key:NULL !!!
皮肉なことに、製品からSELECT SELECT *を実行すると、category_id IN(1,2);それは型範囲とキーを使用します:My_foreign_key!
したがって、category_idが連続していない値を使用する場合に問題があると思います。
なぜでしょうか?
おかげ
はるかに使用頻度の高いカテゴリよりもあるので、おそらくされます。たとえば、行の90%がcategory_id = 1で、行の10%がcategory_id = 2であれば、それ以上category_idキーを使用することはありません。 (実際の数字は、mysqlがあなたのキーの使用を止めるときのための厳密で速いルールがあるとは信じていません)。 – Hardwareguy