程序员不可不知的SQL查询优化系列之避免排序

避免排序

会进行排序的运算有:

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

在一些数据库里,如果操作对象上的列是唯一索引,那么排序过程本身会被省略掉。

你可能感兴趣的:(程序员不可不知的SQL查询优化系列之避免排序)