跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • SQL 本体查询不慢 mybatis-plus 的分页功能 Count 总数巨慢
未分類
2 10 月 2020

SQL 本体查询不慢 mybatis-plus 的分页功能 Count 总数巨慢

SQL 本体查询不慢 mybatis-plus 的分页功能 Count 总数巨慢

資深大佬 : DeathBless 0

SQL 本体是个多表联查
本来也挺慢的 后来 fouce index 主表 ID 后
查询速度大约只要 300 毫秒

但是用了 mybatis-plus 的自动分页后
他会在主 SQL 外套一个 count(1)来查询总数

本来也没什么问题 但是这个 sql 奇慢无比 大概要 6 秒
这是为什么 有啥办法优化吗

大佬有話說 (27)

  • 資深大佬 : BBCCBB

    不用他的 page 函数, 自己手动加上 offset limit.

  • 資深大佬 : zoharSoul

    把 count 去掉.
    大多数情况下 count 都没啥用, 分页最好换种方式

  • 主 資深大佬 : DeathBless

    @zoharSoul 因为有查询条件 还不少 每张表都有 变了总数就要变

  • 資深大佬 : maigebaoer

    page count join 耗性能的都被你用上了

  • 主 資深大佬 : DeathBless

    @maigebaoer

  • 資深大佬 : ganbuliao

    count(*)

  • 資深大佬 : zhaokun

    他的原理是在你的 sql 外面包了一层 select count(*) from (你的 sql)

  • 資深大佬 : pierswu

    可以 setSearchCount(false)去掉查询总数的,这种分页的需求,如果需求允许的话,不一定每一次翻页都要查一次总数。

  • 資深大佬 : aegon466

    mp 分页还是要全部查出来再分页的 建议自己优化

  • 資深大佬 : zoharSoul

    @DeathBless 总数给前端个 99999 得了

  • 資深大佬 : NPC666

    试试用 pagehelper 进行分页?

  • 資深大佬 : aguesuka

    前端要就手写,不要就不查。现代 sql 解释器查总数还要 6 秒说明 sql 有问题,该改改,该加索引加索引,该拆表拆表

  • 資深大佬 : aguesuka

    查 count6 秒查数据 0.3 秒估计也做没排序吧?(或者是按主键)这样分页是有问题的

  • 資深大佬 : PhilC

    @zoharSoul 我们之前就这么干的

  • 資深大佬 : cheng6563

    数据多了分页要快要这样:
    1.不查总数。
    2.用主键按偏移量分页,这样会限制翻页数量,比如 where id > 2233 limit 20,10

    最好是按日期,时间之类的字段加索引进行限制

  • 資深大佬 : zoharSoul

    @PhilC #14
    是啊, 常见做法, 一般 count 对于用户也没啥意义.

    比如我刷 V2EX 也不关心总共多少帖子嘛

  • 資深大佬 : xgq89757

    @zoharSoul 我们现在就这么干的。今天看到另外一个帖子,用 explan 里的行数,这个不精确,但妙啊

  • 資深大佬 : gundam0603

    有的版本开始 count 可以手动写,自己写个去掉没有的子查询和关联,会快不少,再慢就只能加 count 的缓存了

  • 資深大佬 : xiaochong0302

    @pierswu 那就要用自定义的分页组件了,其实 count 也可以缓存起来,离不开自定义

  • 資深大佬 : gundam0603

    @xiaochong0302 直接写 Count 方法覆盖就行了,从某个版本开始就支持了,这种治标不治本,让产品看看需不需要总数吧 或者加条件什么的,数据量大了迟早会不行的

  • 資深大佬 : wangsongyan

    我的系统日志就是固定 10000 条

  • 資深大佬 : Sasasu

    带着 fliter 数 count 就是这样子的

    看你们团队谁强势
    – 产品强势:就这么放着,等产品觉得慢,然后告诉他数总数花了 6 秒
    – 开发强势:返回假的总数或者用游标翻页

  • 資深大佬 : lewis89

    还没改吗? 把 SQL parse 好 然后修改语法树 有这么难吗?

  • 資深大佬 : gundam0603

    @xiaochong0302 搞错了 没这功能。。。。

  • 資深大佬 : pierswu

    @aegon466 mp 分页是会在语句后面再拼上分页语句的,你说的全部查出来是什么意思

  • 資深大佬 : gageshan

    利用自增字段来做分页,where p_id > xxx order by p_id limit 10

  • 資深大佬 : lijinxhua

    歪个,
    主大大用 MP 做多表关联分页怎么搞定的?
    是自己手写 SQL 吗?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具