MySql外键索引

时间:2009-06-09 16:19:39

标签: mysql database indexing foreign-keys innodb

我使用的Mysql表产品在类别表

上有一个外键category_id

定义了外键约束(Innodb引擎)。

我注意到当我从category_id = 1的产品中运行EXPLAIN SELECT *时;

它使用外键,所以我看到type = Range和Key:my_foreign_key

但是当我从category_id IN(1,10)的产品中运行EXPLAIN SELECT *时;

它使用全表扫描:type = ALL,Key:NULL !!!

具有讽刺意味的是,当我从category_id IN(1,2)的产品中进行EXPLAIN SELECT *时;它使用type-range和Key:My_foreign_key!

所以我认为当category_id使用不连续的值时会出现问题。

任何想法为什么?

由于

1 个答案:

答案 0 :(得分:4)

这是长期问题的一种形式“当我的桌子变大时,为什么MySQL会停止使用索引?”基本上,有一点是使用索引停止有用并开始损害您的查询,MySQL的查询优化器旨在考虑到这一点。如果您不相信,可以使用FORCE INDEX 使使用特定索引,使用和不使用索引运行查询,并查看您获得的结果。

(1,2)(1,10)的行为不同可能是因为第2类比第10类使用得多。