高效的mysql分页办法及原理?

刚刚阅读1回复0
kewenda
kewenda
  • 管理员
  • 注册排名1
  • 经验值210310
  • 级别管理员
  • 主题42062
  • 回复0
楼主
1、高效的mysql分页办法及原理?2、若何优化Mysql万万级快速分页?高效的mysql分页办法及原理?

起首看一下分页的根本原理:

复造代码 代码如下:

mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20G ***************** 1. row ************** id: 1 select_type: SIMPLE table: message type: index possible_keys: NULL key: PRIMARY key_len: 4 ref: NULL rows: 10020 Extra: 1 row in set (0.00 sec)

一,最常见MYSQL最根本的分页体例:

select * from content order by id desc limit 0, 10

在中小数据量的情况下,如许的SQL足够用了,独一需要留意的问题就是确保利用了索引。跟着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

select * from content order by id desc limit 10000, 10

就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,能够通过2种体例:

一,子查询的分页体例来进步分页效率,飘易用的SQL语句如下:

SELECT * FROM content WHERE id> (SELECT id FROM content ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) ORDER BY id desc LIMIT $pagesize

为什么会如许呢?因为子查询是在索引上完成的,而通俗的查询时在数据文件上完成的,凡是来说,索引文件要比数据文件小得多,所以操做起来也会更有效率。(via)通过explain SQL语句发现:子查询利用了索引!

若何优化Mysql万万级快速分页?

两步。

1,垂曲分表。拆表,按你的各个应用场景,如微信登录、电话登录,每个应用场景一张表,那张表的字段比原表少,仅仅将该场景用到的字段存进去。

2,程度分表。颠末第一部后,将每个子表停止程度拆分,。详细办法,好比手机号登录场景的子表,可按手机号末尾一位取模,再分为10个子表,每个子表数据量百万级,mysql性能差不多能够忍耐。对了,别忘建个索引。

总结一下,要到达的目标无非两个:瘦表,单表数据量级不要超越百万级

0
回帖 返回数码

高效的mysql分页办法及原理? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息