为什么MySQL会在有可能的密钥时使用密钥

时间:2012-08-02 19:18:42

标签: mysql sql indexing primary-key

所以每当我解释我的查询时,我经常会得到一些实例,其中它将某些字段表示为可能的键,但是密钥表将为null ...

为什么MySQL会这样做并决定不使用密钥,而事实上它可以使用可能的密钥?

2 个答案:

答案 0 :(得分:7)

优化器可能会合理地计算出使用索引会导致性能低于全表扫描。

我会举个例子:

比如说,您有一个已编入索引的性别字段,但有90%的记录是女性。优化器可以使用索引,但由于数据的传播是倾斜的,因此执行全表扫描可能更有效。

答案 1 :(得分:5)

它不能总是使用密钥,例如:

SELECT * FROM A, B where A.id = B.id;

虽然id是两个查找的可能键,但它们不能使用。其中一个表必须进行全面扫描。