避免排序
会进行排序的运算有:
GROUP BY
ORDER BY
聚合函数 SUM, COUNT,AVG,MAX,MIN
DISTINCT
集合运算符 UNION INTERSECT EXCEPT
窗口函数 RANK ROW_NUMBER
- 在使用集合运算符的时候,
UNION INTERSECT EXCEPT
,如果不在乎结果中有重复数据,请使用UNION ALL代替UNION,这样就不会排序了。对于INTERSECT
和EXCEPT
都是如此,加上ALL就不会排序了。 - 使用
EXISTS
代替DISTINCT
,为了去重,DISTINCT也会排序,所以尽可能避免。 - 在
MAX/MIN
函数使用时,这两个都会进行排序。如果在参数字段上建有索引,那么只会扫描索引,不会扫描整个表。对于联合索引,只要查询条件是联合索引的第一个字段,索引就是有效的。这种方式并不能去掉排序,只是会优化 - 通常情况下,GROUP BY 和ORDER BY 都会进行排序。通常优化方式是:采用带有索引的列来进行GROUP BY 和ORDER BY。
在一些数据库里,如果操作对象上的列是唯一索引,那么排序过程本身会被省略掉。