mysql+翻页性能,mysql 翻页优化

mysql翻页优化

对于翻页,我们通常是用

select fields from table limit 100,10

但是当要越翻后面的页数之后,耗时变得很长

select fields from table limit 1000000,10

explain select * from `user` where id >= (select id from `user` limit 10000000, 1) limit 10

究其原因,是因为mysql在查询中,查询了1000010条数据,并把前面的1000000数据给丢掉了。以下是该查询的explain

MySQL [test]> explain select * from `user` limit 1000000,10;

+----+-------------+-------+------------+------+---------------+------+---------+------+----------+----------+-------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+-------+------------+------+---------------+------+---------+------+----------+----------+-------+

| 1 | SIMPLE | user | NULL | ALL | NULL | NULL | NULL | NULL | 15053672 | 100.00 | NULL |

+----+-------------+-------+------------+------+---------------+------+---------+------+----------+----------+-------+

1 row in set, 1 warning (0.00 sec)

解决方案

方案一

不给查页数过大的数据,例如百度搜索的结果,最大页数在100页以内。但是这个只适用部分场景

方案二

优化sql,让mysql在主键索引上进行limit

此sql在数据量百万内基本是在1s内完成,当数据量上去之后,则耗时更久

select * from user where id in (select tmp.id from ( select id from `user` order by id asc limit 1000010,10 ) as tmp )

方案三

进行模糊查找

这个速度是最快的,而且不管数据量的大小,都在毫秒级

缺点是无法完成条件搜索

select * from user where id >1000000 limit 10

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值