您的位置:首页 > 财经 > 金融 > mysql大表的深度分页慢sql案例(跳页分页)-2

mysql大表的深度分页慢sql案例(跳页分页)-2

2024/12/23 8:37:22 来源:https://blog.csdn.net/s2008100262/article/details/139351956  浏览:    关键词:mysql大表的深度分页慢sql案例(跳页分页)-2

1 背景

有一张大表,内容是费用明细表,数据量约700万级, 普通B+树索引KEY `idx_fk_fymx_qybh_xfsj` (`qybh`,`xfsj`)。

1.1 原始深度分页sql

 select t.* from fk_fymx t where t.qybh ='XXXXXXX' limit 100000,100;

 深度分页会导致加载数据行过多100000+100=100100行,磁盘IO代价过高比较慢

1.2 原始深度分页sql执行耗时

共耗时 1m2s

 2、解决方案

2.1 优化之后sql

select t.*  from fk_fymx t,(select  id from fk_fymx where  qybh ='xxxxxx' limit 100000,100) t2 where t.id = t2.id

采用延迟关联的方式进行处理,减少SQL回表,但是要记得索引需要完全覆盖才有效果,SQL改动如下:充分利用索引覆盖的特性,扫描索引结构,避免全表扫描。

 

 2.2 优化之后sql执行耗时

45ms 

3、总结

     深度分页往往会带来全表扫描查询慢的问题,我们一定要分析执行计划,要么利用连续分页特性解决问题、要么利用索引扫描来解决问题。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com