2

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

为什么 MySQL 会这样做并决定不使用任何键,而实际上它可以使用可能的键?

4

2 回答 2

8

优化器可以合理地计算出使用索引会导致比全表扫描更差的性能。

我给你举个例子:

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

于 2012-08-02T19:22:20.787 回答
5

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

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

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

于 2012-08-02T19:23:30.157 回答