【order by 不唯一字段】与【limit】混用的坑--mysql

 

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会找到排序需要的的行数行后立马返回,而不是排序整个查询结果再返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值