问题描述
我正在学习DB index
。
在MysqL classicmodels db
中,我不知道为什么该查询使用全索引扫描。
select salesRepEmployeeNumber,count(*)
from customers
where creditLimit > 100000
group by salesRepEmployeeNumber;
客户表在customerNumber上具有聚集索引,在salesRepEmployeeNumber上具有非聚集索引。据我了解,非聚集树的数据条目中有一个<key,key of clustered index>
。 难道creditLimit column
子句中的WHERE
信息只能通过访问数据记录才能知道吗?如果是这样,MySQL查询优化器是否不应该使用full table scan
而不是full index scan
? B tree clustered index B tree Non-clustered index Query Execution Plan
解决方法
如果您在(credit limit,salesRepEmployeeNumber)
上定义了索引,则可以仅通过索引来执行此查询,而无需接触数据页。