总结起来就是一句话:
当order by 字段出现在where条件中时,才会利用索引去排序操作。其他情况,order by不会利用索引排序。
第一步:根据where条件和统计信息生成执行计划,得到数据。
第二步:将得到的数据排序。
当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则排序操作。
第三步:返回排序后的数据。
这个结论不仅对order by有效,对其他需要排序的操作也有效。比如group by 、union 、distinct等。