order by需要加载所有数据到reduce中排序,排序方法可能是冒泡、快排、归并,无论如何都要加载所有数据order by limit创建一个大小为limit的缓存数组,采用插入法进行排序,把每行数与数组内的数比较,大的话就插入,每插入一个数都有一个数被挤出去,保证每次比较的次数都只有limit次,因此严格模式允许order by limit,虽然比较的数多,但是每次比较的资源消耗很少。
sort by局部排序,最终生成的每个文件都有序但不能保证全局有序sort by limit 相当于sort by+order by limit,先局部排序取TopN,然后读入多个TopN结果再全局排序取TopN。