sql 中 order by 排序可能发生2种情况:
1)对应覆盖索引,直接在索引上查询时,就是有序的,不需要另外处理排序
2)没有使用到索引,先取出数据,形成临时表做 file sort
示例目标
取出来的数据本身就是有序的,利用索引来排序
示例分析
例如 有一个商品表,现在想取出某个分类下的商品,按照价格排序
sql :
... where category_id=N order by price
目前只对分类ID做了索引,这时 order by 操作必然进行了单独的排序操作
使用 explain 分析这个sql语句时,会看到:
Extra
Using where;Using filesort
改进
现在添加一个索引,category_id和price 的联合索引
再使用 explain 分析这个sql语句时,会看到:
Extra
Using where
可以看到没再使用filesort,这样就利用了索引来排序,因为按照索引取出来的数据本身有序,order by 操作时用到了索引,一看本身就是有序的,就不再需要file sort操作