问题:在 WHERE 条件字段上加索引,但是为什么在 ORDER BY 字段上还要加索引呢?
    优化建议:
    1. SQL 中,可以在 WHERE 子句和 ORDER BY 子句中使用索引,目的是在 WHERE 子句中 避免全表扫 描 ,在 ORDER BY 子句 避免使用 FileSort 排序 。当然,某些情况下全表扫描,或者 FileSort 排 序不一定比索引慢。但总的来说,我们还是要避免,以提高查询效率。
    2. 尽量使用 Index 完成 ORDER BY 排序。如果 WHERE 和 ORDER BY 后面是相同的列就使用单索引列; 如果不同就使用联合索引。
    3. 无法使用 Index 时,需要对 FileSort 方式进行调优。

    order by丢失索引情况

    • select * … order by … 不限制会丢失索引,
    • select * … order by … limit 增加limit过滤条件会用上索引
    • order by 时规则不一致,索引失效(顺序错,不索引,方向反,不索引)

    索引是升序,但order by age DESC 降序 calssid ASC 升序,丢失索引。
    order by条件没有满足最左匹配原则。
    order by age DESC classid DESC 全部降序又可以使用上索引。(方向反如果全部反就可以用上索引)

    • 无过滤不索引 ```sql INDEX a_b_c(a,b,c) order by 能使用索引最左前缀
    • ORDER BY a
    • ORDER BY a,b
    • ORDER BY a,b,c
    • ORDER BY a DESC,b DESC,c DESC 如果WHERE使用索引的最左前缀定义为常量,则order by 能使用索引
    • WHERE a = const ORDER BY b,c
    • WHERE a = const AND b = const ORDER BY c
    • WHERE a = const ORDER BY b,c
    • WHERE a = const AND b > const ORDER BY b,c 不能使用索引进行排序
    • ORDER BY a ASC,b DESC,c DESC / 排序不一致 /
    • WHERE g = const ORDER BY b,c /丢失a索引/
    • WHERE a = const ORDER BY c /丢失b索引/ ```