多数据分页列表sql优化

普通的查询方式

SELECT * FROM `user` WHERE `sex`=1  and `userName` LIKE '%明%' ORDER BY `seq` desc LIMIT 0,15

数据量不大,就几千条数据,那么这句sql速度的影响就不大;但数据量超过10万,时间上的变动就会比较明显。

问题和优化原理

问题:
查询后面的数据,分页 越多,条件 越多,点击的页码 越大,速度就会越慢

原理:MySQL需要排序去查前面的记录,直到查询到需要的那一页,再丢弃前面的记录,然后返回需要的那一页数据。使用limit分页时的MySQL要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。

这里用到的sql优化方式是:

1、子查询优化
2、延迟关联优化
3、限定id优化

第一种优化sql (子查询优化+限定id优化)

select * from `user` where `id` > (select `id` from `user` WHERE `sex`=1  and `userName` LIKE '%明%'  order by `id` desc limit 169620,1 )  limit 15;

第二种优化sql(子查询优化+延迟关联优化)

select * from `user`  inner join (select id from `user` WHERE `sex`=1  and `userName` LIKE '%明%' order by `id` desc limit 169620,15 ) as a using(id);

第三种优化sql(子查询优化+限定id优化)

select * from `user` a , (select id from `user` WHERE `sex`=1  and `userName` LIKE '%明%' order by `id` desc limit 169620,15 ) b where a.id=b.id;

第四种优化sql(子查询优化+限定id优化)

select * from `user` a , (select id from `user` where `id` > 169620 and `sex`=1  and `userName` LIKE '%明%' order by `id` desc limit 15 ) b where a.id=b.id;

索引优化

	1、普通索引
	2、组合索引
	3、强制索引(特殊情况,sql涉及多条件查询,且查询的索引非最优)

题外话

总数count的效率比对:count(1)>count(*)>count(field)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值