sql1
- select sum(cost) from order order by 不唯一字段 limit index,offset;
sql2.
- select sum(cost) from order order by 不唯一字段;
累加所有页数的sql1 的cost和sql2的cost不一致,与期望不符合(先对所有的数据排序,之后再分页获取。)
原因解析:
上面官方文档里面有提到如果你将Limit row_count与order by混用,mysql会找到排序的row_count行后立马返回,而不是排序整个查询结果再返回。如果是通过索引排序,会非常快;如果是文件排序,所有匹配查询的行(不带Limit的)都会被选中,被选中的大多数或者全部会被排序,直到limit要求的row_count被找到了。如果limit要求的row_count行一旦被找到,Mysql就不会排序结果集中剩余的行了。(此段取自网络)
总结:
当排序和分页结合时,一定要非常警觉,order by 后应采用唯一的字段或字段组合
若order by 非唯一字段和 limit结合,mysql会找到排序需要的的行数行后立马返回,而不是排序整个查询结果再返回