第一种:主键自增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。关于此点这里不做深入。