我正在使用一个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