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 
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性...
    CaesarXia阅读 14,076评论 1 30
  • MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子...
    沉默剑士阅读 12,158评论 0 16
  • 诅咒成真了 再没有石头在空中逗留,让你镶嵌金子 死者是成熟的指尖 看不见凶手的谋杀 所有的鹰伸展其形态 你都可以想...
    喜宁123阅读 3,258评论 0 5
  • 过完大年3人上班的节奏,早晚班一个接着一个的来,心力交瘁,早已经累的不想说一句话 幸好有它,一家我很喜欢的书店,环...
    你变了不爱我了阅读 1,774评论 0 1
  • 男女篇 要想在日本知道哪些是真的日本人,只要看是否带口罩就行了。戴口罩的,几乎100%是日本人,因为日本有花粉症。...
    竹影灯阅读 3,255评论 0 3

友情链接更多精彩内容