当order by 字段出现在where条件中时,才会利用索引而无需排序操作

我在网上搜索关于order by 和where 以及索引关系时,发现大多数文章都提到
当order by 字段出现在where条件中时,才会利用索引而无需排序操作。其他情况,order by不会出现排序操作。
我很奇怪,当order by 字段出现在where条件中时,才会利用索引而无需排序操作,其它情况下,不应该都需要额外的排序操作么?

order by 就是排序

order by用在select语句中时,具备排序功能。如:
SELECT 注册号, 名称, 法定代表人 FROM gscx ORDER BY 注册号
则是将表gscx中的数据按“注册号”一列排序。

而只有当order by 与where 语句同时出现,order by的排序功能无效。换句话说,order by 中的字段在执行计划中利用了索引时,不用排序操作。如:
SELECT注册号, 名称, 法定代表人 FROM gscx where (法定代表人 LIKE '%王%') ORDER BY 注册号 时,不会按“注册号”一列排序。

所以,只有order by 字段出现在where条件中时,才会利用该字段的索引而避免排序。
对于上面的语句,数据库的处理顺序是:
第一步:根据where条件和统计信息生成执行计划,得到数据。

第二步:将得到的数据排序。

当执行处理数据(order by)时,数据库会先查看第一步的执行计划,看order by 的字段是否在执行计划中利用了索引。如果是,则可以利用索引顺序而直接取得已经排好序的数据。如果不是,则排序操作。

第三步:返回排序后的数据。