我们在做一些数量级不是爆大的分页场景时,一般都会去使用LIMIT加offfset的方式来实现。一般还会再加个order by来做个排序。
上面的做法再配合索引,性能一般会不差。
但这种分页的方式有个很恼火的问题,就是偏移量越大,越到后面就会越慢。
即使是elastic search也有这样的问题。
这个问题的核心其实就是offset(偏移量)。当偏移量越大时,mysql会扫描大量的行,然后抛弃掉。
所以就会很慢。
一个非常简单又实用的方法就是,你可以通过记录绝对位置的方式,把这个避免掉。
就像你看书一样,上一次看到哪里你会夹个书签,下次看的时候直接就翻到了。
数据库我们也可以这样,比如我们可以根据 更新时间排倒序,然后每次分页查询都会记录最后的时间,然后下一页就从这个时间点开始,取一页就是了。
SELECT * FROM tb_crm WHERE updated_at<#{上一页的最后一条的updated_at}
ORDER BY updated_at DESC LIMIT 20;
通过这种书签配合limit的方式就可以避免offset。
这样的话,无论翻页到多么的后面,性能都不差。
如果觉得不错就点个赞,甚至直接分享都可以。
本文分享自 ImportSource 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!