我正在使用一個Mysql表產品,它具有一個外鍵category_id在類別表MySql外鍵索引
外鍵約束被定義(Innodb引擎)。
我注意到,當我從產品where category_id = 1運行EXPLAIN SELECT *時;
它使用外鍵,所以我看到類型=範圍和重點:my_foreign_key
但是當我運行從產品EXPLAIN SELECT *其中CATEGORY_ID IN(1,10);
它使用全表掃描:type = ALL,Key:NULL !!!具有諷刺意味的是,當我做EXPLAIN SELECT *時,其中category_id IN(1,2);它使用類型範圍和鍵:My_foreign_key!
所以我猜有一個問題,當category_id使用不連續的值。
任何想法爲什麼?
感謝
更頻繁使用的這是正確的,我認爲這個術語叫做鍵基數。例如,如果90%的行是category_id = 1,10%的行是category_id = 2,那麼它就不會再使用category_id鍵了。 (實際的數字組成了我不相信當mysql停止使用你的密鑰時有一條硬性規則)。 – Hardwareguy 2009-06-09 16:36:07