mysql排序语句函数 详解mysql排序规则

索引的选择【mysql排序语句函数 详解mysql排序规则】①首先 , 清除emp上面的所有索引 , 只保留主键索引!
drop index idx_age_deptid_name on emp;
②查询:年龄为30岁的 , 且员工编号小于101000的用户 , 按用户名称排序
explain SELECT SQL_NO_CACHE * FROM emp WHERE age =30 AND empno <101000 ORDER BY NAME ;

mysql排序语句函数 详解mysql排序规则

文章插图
mysql排序语句函数 详解mysql排序规则

文章插图
mysql排序语句函数 详解mysql排序规则

文章插图
mysql排序语句函数 详解mysql排序规则

文章插图
mysql排序语句函数 详解mysql排序规则

文章插图
原因:所有的排序都是在条件过滤之后才执行的 , 所以如果条件过滤了大部分数据的话 , 几百几千条数据进行排序其实并不是很消耗性能 , 即使索引优化了排序但实际提升性能很有限 。相对的 empno<101000 这个条件如果没有用到索引的话 , 要对几万条的数据进行扫描 , 这是非常消耗性能的 , 使用empno字段的范围查询 , 过滤性更好(empno从100000开始)!
结论: 当范围条件和group by 或者 order by 的字段出现二选一时  , 优先观察条件字段的过滤数量 , 如果过滤的数据足够多 , 而需要排序的数据并不多时 , 优先把索引放在范围字段上 。反之 , 亦然 。

    推荐阅读