好问题。
索引从左到右起作用,因此您的
WHERe条件将使用索引。在这种情况下,排序也将利用索引(下面的执行计划)。
从手册:
即使
ORDER BY索引与索引不完全匹配,也可以使用索引,只要索引的所有未使用部分和所有额外的ORDERBY列在WHERe子句中都是常量即可。以下查询使用索引来解析ORDER BY零件:SELECt * FROM t1WHERe key_part1=constantORDER BY key_part2;
如果您只有一个列索引(
accountid),则将使用文件排序。因此,您的查询确实受益于该索引。
两栏索引
create table t1 ( accountid tinyint, logindate date);create index idx on t1 (accountid, logindate);insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')
执行计划
ID SELECT_TYPE表类型POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA1 SIMPLE t1 ref idx idx 2 const 5100使用位置; 使用索引
单列索引
create table t1 ( accountid tinyint, logindate date);create index idx on t1 (accountid);insert into t1 values (1, '2012-09-05'), (2, '2012-09-09'), (3, '2012-09-04'), (1, '2012-09-01'), (1, '2012-09-26'), (2, '2012-05-16'), (1, '2012-09-01'), (3, '2012-10-19'), (1, '2012-03-01')
执行计划
ID SELECT_TYPE表类型POSSIBLE_KEYS KEY KEY_LEN REF ROWS FILTERED EXTRA1 SIMPLE t1范围idx idx 2 5 100 使用文件排序



