【mysql】优化

limit优化


  • 背景:通常情况下,limit 4000000, 25会导致慢查询很慢,多次查询会导致mysql集群瘫痪
  • 分析:limit 4000000, 25 会导致mysql扫表从1 扫到4000025,取出4000001-4000025的25条数据,大大降低查询效率
  • 优化措施:
    • 降级策略
      • 对查询跳页传值限制优化:对pageSize 较小,而pageNum过大的请求予以限制,自行做业务判断限制pageSize和pageNum,减少此类查询
    • 使用索引覆盖+子查询优化
      • 子查询获取偏移量的id,再向后查找
      		 /*子查询获取偏移100条的位置的id,在这个位置上往后取25*/
      		 SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
      		 from emp a left join dep b on a.depno = b.depno
      		 where a.id >= (select id from emp order by id limit 100,1)
      		 order by a.id limit 25;
      		
      		 /*子查询获取偏移4000000条的位置的id,在这个位置上往后取25*/
      		 SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depname
      		 from emp a left join dep b on a.depno = b.depno
      		 where a.id >= (select id from emp order by id limit 4000000)
      		 order by a.id limit 25;
      
    • 起始位置重定义
      • 记住上次分页的最后一条数据,从此往后查询
      		 /*记住了上次的分页的最后一条数据的id是100,这边就直接跳过100,从101开始扫描表*/
      		 SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
      		 from emp a left join dep b on a.depno = b.depno
      		 where a.id > 100 order by a.id limit 25;
      		
      		 /*记住了上次的分页的最后一条数据的id是4000000,这边就直接跳过4000000,从4000001开始扫描表*/
      		 SELECT a.id,a.empno,a.empname,a.job,a.sal,b.depno,b.depname
      		 from emp a left join dep b on a.depno = b.depno
      		 where a.id > 4000000
      		 order by a.id limit 25;
      

mysql主键生成策略


  • 背景:主键自增长为数据表带来一些检索便利、易排序的优点,但需要处理删除后主键不连续问题
  • 操作:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值