首页源码mysql分页,MySQL 分页查询

mysql分页,MySQL 分页查询

编程之家2024-05-1493次浏览

一、mysql分页怎么越到后面越慢

因为offsetlimit是本质上就是服务端的scan啊,查询最后一条就是scan了1000万数据,哪怕scan的是索引也要scan几十万个磁盘块,当然慢

mysql分页,MySQL 分页查询

如果是导数据的话考虑下游标

如果是界面上展示的话首先可以考虑优化查询场景,因为很少有1000w条数据分页展示的情况,优化后一般顶天1w页也就是10w左右数据,合理设计和命中索引的情况下offsetlimit还是很快的

二、高效的mysql分页方法及原理

一,最常见MYSQL最基本的分页方式:

select*fromcontentorderbyiddesclimit0,10

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引。随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

select*fromcontentorderbyiddesclimit10000,10

mysql分页,MySQL 分页查询

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

此时,可以通过2种方式:

一,子查询的分页方式来提高分页效率,飘易用的SQL语句如下:

SELECT*FROMcontentWHEREid>(SELECTidFROMcontentORDERBYiddescLIMIT".($page-1)*$pagesize.",1)ORDERBYiddescLIMIT$pagesize

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。(via)通过explainSQL语句发现:子查询使用了索引!

idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra

mysql分页,MySQL 分页查询

1PRIMARYcontentrangePRIMARYPRIMARY4NULL6264Usingwhere

2SUBQUERYcontentindexNULLPRIMARY4NULL27085Using

三、如何优化Mysql千万级快速分页

两步。

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

2,水平分表。经过第一部后,将每个子表进行水平拆分,。具体方法,比如手机号登录场景的子表,可按手机号末尾一位取模,再分为10个子表,每个子表数据量百万级,mysql性能差不多可以忍受。对了,别忘建个索引。

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

三星手机滑盖(哪些是值得购买的三星滑盖手机呢)华为刷机,华为刷机模式怎么进入