pagehelper之百万级数据查询优化

pagehelper之百万级数据查询优化

用过pagehelper的人都知道,那是真香呀,但是当数据量级别越来越大的时候呢?几万,几十万,都没啥感觉,但是当上了百万,千万之后呢?它似乎就不香了呀。

pagehelper相关的解析,浅谈什么的这儿就不说了,网上一搜一大把。这儿主要来解决一下百万级别以上的pagehelper的慢查询问题。

pagehelper用过的都知道,每次有总页数,总条数,做分页真的是舒服呀。但是了解他原理的时候就知道,这些数据是怎么来的。然后数据库级别达到了百万级以上后,count这个效率真的感人,加索引没用,怎么加都没太大的作用,而且伴随而来的每一次翻页都要做一个count...感动哭了。。。其实查询每一页的数据加了索引,查询效率还是非常高的毫秒级别(当然是前面几页),其实大家往往也只是关注前面的几页吧。而做count是每翻一页都会做,count效率(测试数据500w,走了索引)大约是8-9s的样子,那么条件相同,为什么每次都要去count呢?(这个地方说明下,查询条件可能会多条,会走回表,你要是说你不回表,那你就随意count吧。。。)

pagehelper怎么关count呢?也比较简单:

PageHelper.getLocalPage().setCount(false);

即可,相关参考文档:https://blog.csdn.net/qq_38675373/article/details/103932091

那么相同条件的count可以做一个缓存操作,其实就是有两种方案了,配合前端,不用展示所有的条数,如果需要所有条数单独做查询并缓存

pagehelper之百万级数据查询优化_第1张图片

方案一缺点就是没有总页数,不用做count,整体数据还是比较快,百万级数据走有回表索引也在几十到上百毫秒左右,当然还可以在此基础上做更多的优化,此处只是一个引子

方案二缺点是前面异步的时候可能总页数或者条数可能有些问题,但是后面会好些,但是也并不适合短时间内变化较大的数据,或者都总数要求很高的情况。

但是如果你能轻松上数仓、es、opensearch、大数据等等这些,以上就都可以忽略。

(查询数据,索引这些没有贴出来,此处指提供思路。造数据,索引这些已经默认大家都会了)

推荐:pagehelper原理:https://blog.csdn.net/qq_21996541/article/details/79796117

其实还有特别多,这里随手找了一个写的挺不错的

你可能感兴趣的:(mysql,java,mysql,sql)