对于只有几万条数据的表这样做当然没问题,也不会在用户体验上有何不妥,但是要是面对成百万上千万的数据表时,这样就不足以满足我们的业务需求了,如何做到对千万级数据表进行高效分页?首先要学会使用 explain 对你的SQL进行分析,如果你还不会使用 explain 分析SQL语句 传送门 http://blog.itpub.net/559237/viewspace-496311
一丶合理使用 mysql 查询缓存 结合复合索引进行查询分页
开启查询缓存的原因是为了增大吞吐率,提升查询的性能二丶SQL语句的优化(不使用索引)
这里有一张千万级别的数据表,表结构如下
使用 SELECT * FROM LIMIT 0,10 分别对表进行常规分页,当偏移量达到一百万和七百万时的对比如下
当偏移量达到七百万时 的查询时间是1.57s,现在这在我们得业务场景中是不能被应用的,接下来对这句SQL进行优化
a. 查询出最大偏移量的uid,再进行分页 (SELECT uid,u_name,u_age,u_sex,u_is_delete FROM u_user WHERE uid >=(SELECT uid FROM `u_user` LIMIT 7000000, 1) LIMIT 10)
b.先去查询到最大偏移量然后再进行分页,这样看来时间好像变得更长了,显示这种方式不符合我们的场景,对这句SQL再次进行优化 (SELECT uid,u_name,u_age,u_sex,u_is_delete FROM u_user WHERE uid>7000000 LIMIT 10;)
非常棒的查询时间,0.001s,几乎是秒查询,这样即使是千万级的数据表分页起来也能轻松应对
当然,这只是我能想到的实现千万级数据表分页的两种方案,若有其他方式,欢迎评论