mysql深分页

第一种:主键自增id情况:

未改:

   select * from  wx_product_category_info 
   where category_name_cn=#{categoryNameCn} and category_type=#{categoryType} 
   order by id asc
   limit #{pageNum}, #{pageSize};

在普通的limit条件下,如果是直接limit条件查询,他的查询顺序 是通过二级索引查到主键索引,然后在通过主键索引 查询所有的列,会涉及到数据库回表操作,这种情况下在深分页的时候 查询效率大大降低,可以通过 排序,排除解决

改后: 通过前端传递,把当前页最小的id计算带过来,进行排除就可以减少回表并通过主键索引来查询进行提高效率
在这里插入图片描述

  select * from  wx_product_category_info where category_name_cn=#{categoryNameCn}
  and category_type=#{categoryType} and id>#{minId}
  order by id asc
  limit #{pageNum}, #{pageSize};

第二种:主键是UUID:

这种情况下,就不能使用主键排序的方式来做了,因为他是无序的。
但是可以使用伪排序进行操作,通过uuid——Id 建立一个关系表建立伪排序关系,从而可以有序排序

给 uuid 一个伪排序
1, abcd-abcd-abcd
2, bcde-bcde-bcde
然后利用 id 继续上面的操作

第三种:主键是UUID 且不想关联伪关系的情况下

可以引用:Elastic Search搜索引擎(基于倒排索引),实际上类似于淘宝这样的电商基本上都是把所有商品放进ES搜索引擎里的(那么海量的数据,放进MySQL是不可能的,放进Redis也不现实)。但即使用了ES搜索引擎,也还是有可能发生深度分页的问题的,这时怎么办呢?答案是通过游标scroll。关于此点这里不做深入。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值