type
status
date
slug
summary
tags
category
icon
password
example-row
example-row
场景复现
一张数据量很大的表中,分页查询前面几页数据,速度还好,当查询到很后面的分页时,速度慢就体现出来了,而且越往后面的分页,速度就更慢。常见的慢sql问题,可能explain下慢sql的执行过程,去创建一个对应的索引,保证这个慢sql能命中索引。而这个问题,就不能通过这种方式解决慢sql问题。
解决方案
可以将这种分页查询改造成条件查询,然后给这个条件加索引,比如我之前有张业务表里有个唯一索引字段是一个连续的序号字段,前端每次请求分页数据时,我另外返回了一个最大的序号值给到前端。前端请求下一个分页数据时,传入最大的那个序号给到后端接口,我根据这个序号值,把后续的一页数据查询出来返回给前端,并给出一个新的最大的序号值。当然,如果逐渐id字段是自增字段,也可以使用id字段这么做。
上面的方案是改变业务实现来达到解决慢sql的问题。其实数据量如果大到分页查询影响数据库性能了,这个时候就该考虑分库分表处理了。
- 作者:黄x黄
- 链接:https://hxhowl.site/article/mysql-optimization002
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章