为什么我的查询没有在mysql中使用松散索引扫描?

为什么我的查询没有在mysql中使用松散索引扫描?,mysql,query-optimization,database-administration,Mysql,Query Optimization,Database Administration,mysql版本:5.0.77 表: create table cus ( id int(11), salary varchar (50), no int(11) ) engine=innodb; 有两个索引 1st one : id (id,salary,no) 2nd one : no (no,salary,id) 解释从cus中选择id、maxsalary、no,其中no='1'按id分组;不使用索引显示它。我认为它应该使用id索引,因为我提到id列作为分组列,并在分组列之后的列上

mysql版本:5.0.77

表:

create table cus (
   id int(11), salary varchar (50), no int(11)
) engine=innodb;
有两个索引

1st one : id (id,salary,no)
2nd one : no (no,salary,id)
解释从cus中选择id、maxsalary、no,其中no='1'按id分组;不使用索引显示它。我认为它应该使用id索引,因为我提到id列作为分组列,并在分组列之后的列上使用max aggregate函数

当使用explain语句执行查询时,额外列中的输出将显示USINGWHERE、USINGINDEX和USINGTEMPORAL。我希望额外的列的输出使用where,使用groupby的索引


有人能解释这个问题背后的原因吗?

按以下顺序创建索引:否、id、薪水。no必须放在第一位,因为它在where子句中使用的条件是常数。由于我在groupby中使用id列,根据松散索引扫描的逻辑,我希望mysql使用id index而不是no index。索引的第一部分是no。取决于该值的基数,可能会跳过索引,因为执行表扫描比使用低基数索引更快。从技术上讲,因为你做的最好的索引候选人是薪水,id,不,如果你必须使用复合索引的话。我希望上面的查询使用id索引。但它没有使用任何查询。