mysql深度分页 严重影响性能?根本原因是什么?如何优化?

本文 的 原文 地址

本文 的 原文 地址

尼恩说在前面:

在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、shopee、百度、网易的面试资格,遇到很多很重要的面试题:

mysql 深度翻页太慢,如何解决?

深度分页为什么会影响性能?有什么优化方案?

前几天 小伙伴面试 京东,遇到了这个问题。但是由于 没有回答好,导致面试挂了。

小伙伴面试完了之后,来求助尼恩。

遇到mysql 深度翻页这个问题,该如何才能回答得很漂亮,才能 让面试官刮目相看、口水直流。

所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。

单表场景,limit深度分页存在的严重性能问题

大家的业务接口,常常是分页接口。

这样的接口,如果碰到深度分页,都会有慢sql性能问题, 而且会引发 非常严重的 线上 故障。

一个小伙伴反馈,他们公司今年3月份时候,线上发生一次大事故:

  • 第一阶段:后端服务器发生宕机,所有接口超时。

  • 第二阶段:宕机半小时后,又自动恢复正常。

  • 第三阶段:但是过了2小时,又再次发生宕机。

通过接口日志定位,发现MySQL数据库无法响应服务器,出现 大量的 深度翻页的 慢sql:

  • 当 接口 数据 被刷到7000多页,偏移量(offset)高达20w多。

  • 每当这条SQL执行时,数据库CPU直接打满。

  • 查询时间超过1分钟才有响应。

总之,由于慢查询导致数据库CPU使用率爆满,其他业务的数据库请求无法得到及时响应,两个结果:

  • 接口超时。
  • 最后,拖垮主服务器。

所以说,老架构师尼恩提示大家一定当心:limit深度分页存在的严重性能问题。

MySQL Limit 语法格式

Limit 是一种常用的分页查询语句,它可以指定返回记录行的偏移量和最大数目 。

先来看看 MySQL Limit 语法格式。

分页查询时,我们会在 LIMIT 后面传两个参数,一个是偏移量(offset),一个是获取的条数(rows)。

 
SELECT column1, column2, ...
FROM table_name
WHERE condition
LIMIT rows  OFFSET offset;


或者

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset

SELECT column1, column2, ...
FROM table_name
WHERE con
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值