Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
所以每当我解释我的查询时,我经常会得到一些实例,其中它将某些字段声明为可能的键,但是键表将为空......
为什么 MySQL 会这样做并决定不使用任何键,而实际上它可以使用可能的键?
优化器可以合理地计算出使用索引会导致比全表扫描更差的性能。
我给你举个例子:
假设您有一个已编入索引的性别字段,但 90% 的记录是女性。优化器可以使用索引,但由于数据的分布是倾斜的,因此进行全表扫描可能更有效。
它不能总是使用密钥,例如:
SELECT * FROM A, B where A.id = B.id;
虽然id它是两个查找的可能键,但不能同时用于这两个查找。其中一张表必须进行全面扫描。
id