【发布时间】:2012-08-02 19:18:42
【问题描述】:
因此,每当我解释我的查询时,我经常会得到一些实例,其中它将某些字段声明为可能的键,但随后键表将为空...
为什么 MySQL 会这样做并决定不使用任何键,而实际上它可以使用可能的键?
【问题讨论】:
-
你能显示一个示例查询吗?
标签: mysql sql indexing primary-key
因此,每当我解释我的查询时,我经常会得到一些实例,其中它将某些字段声明为可能的键,但随后键表将为空...
为什么 MySQL 会这样做并决定不使用任何键,而实际上它可以使用可能的键?
【问题讨论】:
标签: mysql sql indexing primary-key
优化器可以合理地计算出使用索引会导致比全表扫描更差的性能。
我给你举个例子:
假设您有一个已编入索引的性别字段,但您的记录中有 90% 是女性。优化器可以使用索引,但由于数据的分布是倾斜的,因此仅执行全表扫描可能更有效。
【讨论】:
它不能总是使用一个键,例如:
SELECT * FROM A, B where A.id = B.id;
虽然id 是两个查找的可能键,但它不能同时用于。其中一个表必须执行完整扫描。
【讨论】: