欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

pagehelper之百万级数据查询优化

程序员文章站 2022-04-05 23:37:48
...

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之百万级数据查询优化

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

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

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

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

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

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

相关标签: mysql java sql