使用mysql原生分页关键字 limit 在数据量很大或者起始页很大的时候,性能都会骤降,一种行之有效的方法是换成id,前提是表的id字段是自增的,通过id主键索引直接跳转效率很高
深分页问题就是要能有排除前面数据的能力,比如分页数据中有不重复且有序的字段,用这个字段将上一页的数据排除再limit,这样性能就提高了
您好,数据库层面,类似于select * from table where age > 20 limit 1000000, 10这种查询其实也是有可以优化的余地的;这条语句需要load 1000000数据然后基本上全部丢弃,只取10条当然比较慢;当时我们可以修改为select * from table where id in (select id from table where age > 20 limit 1000000, 10);这样虽然也load了一百万的数据,但是由于索引覆盖,要查询的所有字段都在索引中,所以速度会很快;同时如果ID连续的好,我们还可以select * from table where id > 1000000 limit 10,效率也是不错的,优化的可能性有许多种,但是核心思想都一样,就是减少load的数据; 解决超大分页其实主要是靠缓存,可预测性的提前查到内容,缓存至redis等K-V数据库中,直接返回即可。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。