MySQL LIMIT分页查询优化

当数据量大的时候一般的分页就吃不消了,先是把COUNT(*)计算总数的SQL给去掉,然后再优化LIMIT查询

 

传统分页查询:SELECT c1,c2,cn... FROM table LIMIT n,m

 

MySQL的limit工作原理就是先读取前面n条记录,然后抛弃前n条,读后面m条想要的,所以n越大,偏移量越大,性能就越差。

 

推荐分页查询方法:

1、 SELECT c1,c2,cn... FROM table WHERE id>=20000 LIMIT 10;

 

2、子查询法

SELECT c1,c2,cn... FROM table WHERE id>=

(

    SELECT id FROM table LIMIT 20000,1

)

LIMIT 10;

 

3、高性能MySQL一书中提到的只读索引方法

优化前SQL: SELECT c1,c2,cn... FROM member ORDER BY last_active LIMIT 50,5
优化后SQL: SELECT c1,c2,cn... FROM member INNER JOIN (SELECT member_id FROM member ORDER BY last_active LIMIT 50, 5) USING (member_id)
分别在于,优化前的SQL需要更多I/O浪费,因为先读索引,再读数据,然后抛弃无需的行。而优化后的SQL(子查询那条)只读索引(Cover index)就可以了,然后通过member_id读取需要的列。

 

4、第一步用用程序读取出ID,然后再用IN方法读取所需记录

程序读ID:SELECT id FROM table LIMIT 20000,10;

SELECT c1,c2,cn... FROM table WHERE id IN(id1,id2,idn...)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值